2016-03-08 74 views

回答

1

IPython起4.0.1,!cmd轉換爲get_ipython().system(repr(cmd))IPython.core.inputtransformer._tr_system())。 在來源中,它實際上是InteractiveShell.system_raw(),因爲inspect.getsourcefile()inspect.getsource()可以告訴。

它在Windows中代表os.system(),在其他操作系統中代表subprocess.call()。不可配置,正如您從代碼中看到的那樣。

因此,您需要將其替換爲subprocess.check_call()

除了用手修補猴子,這可以用IPython configuration system完成。可用選項(可通過%config魔法查看)不允許用另一個類替換TerminalInteractiveShell,但幾個TerminalIPythonApp選項允許在啓動時執行代碼。

請仔細檢查你是否真的需要這雖然:一看通過system_raw()的來源表明,它集_exit_code變量 - 所以它實際上並沒有失敗完全默默。