2011-07-19 35 views
6

有人知道如何檢查ipython中最後執行的命令(退出代碼)的狀態嗎?檢查ipython中最後命令的退出狀態

+2

你是否正在使用類似os.system的東西在python中盯着命令?或者你運行命令foo,然後運行你的python腳本? – Zoredache

+0

只是使用ipython作爲shell,並且運行帶有!cmd – piotr

回答

6

我假設你正在談論使用!逃離IPython中運行命令:

In[1]: !echo hello 
hello 

In[2]: 

使用谷歌,我發現的文件,也沒有指揮的退出狀態被提及的任何地方拍攝。使用dir()我查找了一個可能保存這些信息的變量名,但我沒有找到任何東西。我嘗試了x = !ls語法,並且x被設置爲來自命令的輸出行列表;那裏沒有退出狀態。

總之,我不認爲IPython甚至捕獲這些信息。在這一點上,我想檢查IPython的源代碼,試圖找出其他的東西。

您可以隨時運行os.system()的命令並從中獲取退出狀態。

In[1]: !launch_eva 
launch_eva: could not open AT Field 

In[2]: import os 
In[3]: exit_status = os.system("launch_eva") 
launch_eva: could not open AT Field 

In[4]: exit_status 
3 

In[5]: 

因此,我們看到的命令launch_eva將返回退出狀態3時,它無法打開外地。

似乎這是IPython應該保存的東西。有很多隱藏的小變量。您應該提交關於此的功能請求。

注意:這已在Ubuntu上的IPython 0.10.1中進行了測試。 「piotr」的另一個答案是,由於即將發佈,退出代碼將在IPython 0.11中捕獲。我克隆了來自Git倉庫的源代碼https://github.com/ipython/ipython.git並用python ipython.py進行了測試;正如piotr所說,退出狀態保存在名爲_exit_status的變量中。

+1

+1的命令用於新世紀福音戰士參考。 :) –

+0

我想知道如果有人會注意到並享受。 :-) – steveha

13

運行該命令後(至少在即將發佈的v0.11發行版中),它應該作爲_exit_code存儲。

+1

感謝您的信息!我提高了這一點。 – steveha

+2

從0.13.2開始,這是有效的,但是如果我用「a =!false」捕獲stdout(如果我捕獲stdout,_exit_code不會改變)。任何人都知道是否有解決方案? –

相關問題