2011-07-19 6 views
6

ipythonで最後に実行されたコマンド(終了コード)の状態を確認する方法は誰にも分かりますか?ipythonの最後のコマンドの終了ステータスを確認してください

+2

あなたは、os.systemのようなものを使ってPython内でコマンドを開始していますか?または、コマンドfooを実行して、Pythonスクリプトを実行していますか? – Zoredache

+0

ipythonをシェルとして使用し、!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]: 

したがって、私たちはそれがATフィールドを開くことができないとき、コマンド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でEvangelionリファレンスのコマンドを実行するだけです。 :) –

+0

誰かがそれに気づき、それを楽しむことができるのだろうかと思った。 :-) – steveha

13

コマンドを実行した後は(少なくとも今後リリースされるv0.11リリースでは)_exit_codeとして保存する必要があります。

+1

この情報をありがとう!私はこれを棄却した。 – steveha

+2

0.13.2から、これは動作しますが、 "a =!false"(stdout '_exit_code'をキャプチャしても変更されない場合)を使ってstdoutをキャプチャした場合は動作しません。誰でも解決策があるかどうか知っていますか? –

関連する問題