首页 > 解决方案 > Python os.system() 返回错误值

问题描述

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

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

我相当有信心被调用的程序返回零,因为我在返回之前将返回值输出到标准输出。此外,如果从命令行或批处理文件使用相同的输入运行程序,则返回值为零。

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

对于返回值和日志文件问题,Python 2.7 和 3.8 下的行为是相同的。

我的问题是:我该如何诊断?我不确定还能尝试什么。

标签: pythonc++windows-10

解决方案


您正在使用 os.system,它不会像您期望的那样返回退出代码,而是一些不同的东西。

https://docs.python.org/3.8/library/os.html#os.system你可以阅读

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

所以要么使用subprocess.call或做类似的事情

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

推荐阅读