退出状态为$?发生分段错误时使用python

博士

我需要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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

发生错误时安全退出特定状态

为什么发生分段错误错误

Htonl中发生分段错误

使用堆栈评估后缀表达式时发生分段错误

在C中使用rand()生成大量double时发生分段错误

即使指针有pointee,strcpy也会发生分段错误

在空指针上调用free()时发生分段错误

发生分段故障时,更改显示的消息错误

在fortran程序中访问数组时发生分段错误

无法指出发生分段错误的位置

尝试反向字符串时发生分段错误

为什么不发生分段错误?

发生错误时如何使Clozure退出

sprintf 产生分段错误

从网站抓取数据时发生错误时如何阻止python脚本退出

从网站抓取数据时发生错误时如何停止python脚本退出

错误forrtl:严重(174):SIGSEGV,发生分段错误矩阵乘法

大于90个元素的数组时发生分段错误(Fortran绑定,cuBLAS)

为什么较小的堆栈边界不会发生分段错误?

为什么在setjmp()中调用函数时发生分段错误?

从对象C ++中的文件读取内容时发生分段错误

是什么导致C中发生分段错误(核心转储)?

为什么我尝试复制* str = * tmp时会发生分段错误

我编码的一个简单函数发生分段错误

尝试在Qt程序中通过引用传递对象时发生分段错误

for 循环中发生分段错误(未执行正文语句)C

python使用硒,错误:Chrome意外退出。状态码为:0

Gcompris 产生分段错误错误

每条命令都会产生分段错误