【发布时间】:2018-11-26 22:38:06
【问题描述】:
我需要使用 python3 执行echo $? 并捕获退出状态。我特别需要这个来捕获Segmentation fault (core dumped) 状态。
我试过了:
>>> os.system('echo $?')
0
0
得到0 0。另外,对于段错误,
>>> os.system('./a.out')
Segmentation fault (core dumped)
35584
在上面的命令之后,我又得到了:
>>> os.system('echo $?')
0
0
另外,为什么0 会被打印两次?
我浏览了 python-3 的文档,上面写着:
os.system(命令)
在 Unix 上,返回值是以 wait() 指定的格式编码的进程的退出状态。注意POSIX并没有指定C system()函数返回值的含义,所以Python函数的返回值是系统相关的。
这是否说明了这种行为? 帮我澄清一下。
注意:我已经在上述所有步骤之前运行了ulimit -c unlimited。预期结果应为非零或 139(具体而言)。
编辑:我在想这是否有限制!
谢谢!
【问题讨论】:
-
零被打印了两次,因为 shell 中的
echo $?回显了零,然后 Python REPL 打印了os.system()的返回值,这是echo命令的返回码。跨度> -
给新手的建议:如果一个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,也可以选择投票(投票至少需要 15 个声望)点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请看【相关帮助中心文章】[1] [1]:stackoverflow.com/help/someone-answers
-
@Allan,感谢您的建议。 :) 如果我想出的答案与后来有人发布相同答案的答案相同呢?
标签: python-3.x shell subprocess exit