检查ipython中最后一个命令的退出状态

时间:2011-07-19 23:18:53

标签: python ipython

有人知道如何检查ipython中最后执行的命令(退出代码)的状态吗?

3 个答案:

答案 0 :(得分:15)

运行命令后应将其存储为_exit_code(至少在即将发布的v0.11版本中)。

答案 1 :(得分:7)

我假设您正在讨论使用!转义运行来自IPython的命令:

In[1]: !echo hello
hello

In[2]:

使用Google我找到了文档,并没有提到任何地方捕获的命令的退出状态。使用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在无法打开AT字段时返回退出状态3.

似乎这是IPython应该保存的东西。有很多隐藏的变量。您应该提交有关此功能的功能请求。

注意:这是在Ubuntu上的IPython 0.10.1中测试的。 “piotr”的另一个答案是,退出代码将在IPython 0.11中捕获,因为即将发布。我从https://github.com/ipython/ipython.git的Git存储库克隆了源代码,并使用python ipython.py进行了测试;正如piotr所说,退出状态保存在名为_exit_status的变量中。

答案 2 :(得分:0)

您可以将命令结果存储在变量中,并且可以检查变量是否存在于locals()函数中。 例如: -

var1="hello"
if 'var1' in locals():
print "status is false i.e 0"
else :
print "status is false i.e 1"

在这种情况下,变量将打印为hello,如果您不将var1分配给任何值,它将转到else循环。 例2: -

var1=subprocess.check_output('ps -aef | grep -i dmesg -wT | grep -v grep',shell=True)
if 'var1' in locals():
print "status is true i.e 0"
else :
print "status is false i.e 1"