我需要echo $?
使用python3执行并捕获退出状态。我尤其需要此来获取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(具体而言)。
编辑:我在想这是否有限制!
谢谢!
我为上述问题编写了以下代码,并按预期工作。我使用subprocess.Popen()
了满足要求的方法。我过去常常sample.returncode
获得外壳的退出状态。
def run_cmd():
ret = 0
sample_cmd = "./a.out"
sample = subprocess.Popen(sample_cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out_stdout, out_stderr = sample.communicate()
if sample.returncode != 0:
print ("OUTPUT: %s\nERROR: %s\n"%(out_stdout, out_stderr))
print ("Command: %s \nStatus: FAIL "%(sample_cmd))
sys.stdout.flush()
if sample.returncode == 139:
print('Segmentation fauilt(core dumped) occured...with status: ', sample.returncode)
ret = sample.returncode
else:
ret = 1
else:
print ("OUTPUT: %s\n"%(out_stdout))
print ("Command: %s \nStatus: PASS "%(sample_cmd))
ret = 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句