我正在编写一个脚本,它可以将文件名作为输入,编译并运行它。
我将文件名作为输入(input_file_name)。我首先从 python 中编译文件:
self.process = subprocess.Popen(['gcc', input_file_name, '-o', 'auto_gen'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False)
接下来,我正在使用相同的(Popen)调用执行可执行文件:
subprocess.Popen('./auto_gen', stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False)
在这两种情况下,我都在使用
(output, _) = self.process.communicate()
现在,如果在编译过程中出现错误,我可以捕捉到错误,因为返回码是 1,并且我可以获取错误的详细信息,因为 gcc 在 stderr 上发送它们。
但是,即使成功执行,程序本身也可以返回一个随机值(因为最后可能没有“返回 0”)。所以我无法使用返回码捕获运行时错误。此外,可执行文件不会在 stderr 上发送错误详细信息。所以我不能使用我用来捕获编译时错误的技巧。
捕获运行时错误或打印错误详细信息的最佳方法是什么?也就是说,如果 ./auto_gen 抛出分段错误,我应该能够打印以下任何一种:
'Runtime error'
'Segmentation Fault'
'Program threw a SIGSEGV'