如何在带有子进程的python调用中捕获调用过程错误

时间:2019-02-22 20:38:52

标签: python debugging subprocess

尝试使用python脚本调试程序(缓冲区溢出),我需要恢复程序可能发送的所有消息。

在Linux上,终端上的普通呼叫为 ./ a.out AAA 回应

  

您的论点是:AAA

具有溢出输入:。/a.out AAAAAAA 回应

  

您的论点是:AAAAAAA

     

分段错误

我按如下所示构建python代码

import sys, string, os
from subprocess import Popen, PIPE

processName = os.getcwd() + "/a.out"
argument = "AAAAAAAAA"

p = Popen([processName, argument], stdout=PIPE, stderr=PIPE)
output, error = p.communicate()
print(":: %d %s %s" % (p.returncode, output, error))

但我无法收到分段错误消息

据我搜索没有找到所需的参数

1 个答案:

答案 0 :(得分:0)

该过程实际上并未打印Segmentation fault。当您从外壳运行a.out时,它实际上是由外壳本身产生的。因此,这不是您的程序产生的消息。

请参见What actually prints "Segmentation fault"?

但是,您可以通过比较p.returncode模块中的-signal.SIGSEGVsignal来检查过程的返回码以查看是否由于分段错误而停止,请参见所链接的问题到下面了解详情。

这个问题可能是Capture "Segmentation fault" message for a crashed subprocess: no out and err after a call to communicate()

的重复项