Python os.system()返回错误值

Python os.system()返回错误值,python,c++,windows-10,Python,C++,Windows 10,背景:我正在使用一个带有os.system()的Python脚本来反复调用一个命令行程序来运行测试用例。被测试的程序在正常运行时返回零,在错误情况下返回负值。作为确定通过/失败的一部分,我将该值与预期值(不总是零)进行比较 问题是正常退出的测试用例返回零,但是os.system()返回-1073740940。到目前为止,其他非零回报率的表现与预期一致,尽管样本很小 我相当确信被调用的程序正在返回零,因为我在返回之前将返回值输出到std out。此外,如果使用来自命令行或批处理文件的相同输入运行程

背景:我正在使用一个带有os.system()的Python脚本来反复调用一个命令行程序来运行测试用例。被测试的程序在正常运行时返回零,在错误情况下返回负值。作为确定通过/失败的一部分,我将该值与预期值(不总是零)进行比较

问题是正常退出的测试用例返回零,但是os.system()返回-1073740940。到目前为止,其他非零回报率的表现与预期一致,尽管样本很小

我相当确信被调用的程序正在返回零,因为我在返回之前将返回值输出到std out。此外,如果使用来自命令行或批处理文件的相同输入运行程序,则返回值为零

可能相关的是,C++程序使用与命令行相同的内容生成OFFROW日志文件,将相同的缓冲区发送到STD::CUT和日志文件。当由os.system()调用控制时,日志文件内容在程序执行的80%左右停止,即使cout信息正常继续。与使用来自命令行或批处理文件的相同输入运行时的返回值一样,日志文件正确完成并具有与终端相同的内容

在Python2.7和3.8中,返回值和日志文件问题的行为是相同的


我的问题是:如何诊断?我不知道还能尝试什么

您使用的是os.system,它不会像您预期的那样返回退出代码,但会返回一些不同的内容

在你的脑海里,你可以看到埃拉德

在Unix上,返回值是以为wait()指定的格式编码的进程的退出状态。请注意,POSIX没有指定C system()函数返回值的含义,因此Python函数的返回值依赖于系统

因此,可以使用
子流程。调用
或执行以下操作

rslt = os.system("whatever")
exit_code = 0xff & rslt

所以简单的回答是,我得到的值是程序的退出代码,除非Windows觉得它有重要的话要说


在本例中,我调用的DLL正在破坏堆并导致windows中止执行。要获得实际的32位Windows返回代码,而不是符号扩展版本,我需要使用0xFFFFFF将其添加到。我不知道我是否能回答我自己的问题,但是GeloNDA让我走上正确的答案。

请显示Python和C++代码作为A.谢谢。在确定可以复制问题的最小代码集时,我发现返回的是有效的Windows错误代码。事实证明,转换为十六进制且限制为32位的-1073740940是C0000374,这显然转化为Windows error speak中的堆损坏(检测到关键错误C0000374)。调查还在继续。是的,我忘了你在windows下运行。对于linux,如果使用系统,您必须执行退出操作。对于windows,这是不同的。祝你好运