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

8 投票
3 回答
5800 浏览
提问于 2025-04-16 21:53

有没有人知道怎么在ipython中查看最后执行的命令的状态(退出代码)?

3 个回答

0

你可以把命令的结果存储在一个变量里,然后可以用locals()函数检查这个变量是否存在。

比如说,例子1:

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

在这个例子中,如果你给变量var1赋值为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"
16

在你执行这个命令后,它应该被存储为 _exit_code(至少在即将发布的 v0.11 版本中是这样)。

7

我想你是在说用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无法打开AT Field时,它返回的退出状态是3。

看起来IPython应该保存这个信息。里面有很多隐藏的变量。你应该提出一个功能请求,关于这个问题。

注意:这是在Ubuntu上的IPython 0.10.1版本测试的。另一个用户“piotr”提到,在即将发布的IPython 0.11版本中,退出代码会被记录下来。我从Git仓库克隆了源代码,地址是https://github.com/ipython/ipython.git,然后用python ipython.py测试;正如piotr所说,退出状态被保存在一个叫_exit_status的变量里。

撰写回答