与 Python 2.7 相比,Python 3.7 中的子进程返回不同(不正确?)返回代码

问题描述 投票:0回答:0

一些关于 Python 2.7 / 3.7 返回代码差异的帮助将不胜感激。

我正在更新一些代码,以便它在 Python 2.7 和 Python 3.7 中产生相同的输出。

代码使用“subprocess”运行外部程序并读取程序的返回码。如果外部程序运行超过特定时间,它会自行终止并返回“-1”的返回码。当外部程序在命令提示符中运行时,返回码为“-1”,如下所示:

C:> test.exe -itest.cmd test.stl > null

C:> echo %ERRORLEVEL%

-1

我可以在 Python 中使用子进程运行命令,如下所示(我也使用 os.system 运行它作为比较):

import os, sys, subprocess

print("\nOutput for Python version: " + sys.version.split("(")[0])

cmd = "test.exe -itest.cmd test.stl > null"
p_input = cmd.split()

p = subprocess.Popen(p_input, stdout=subprocess.PIPE)
p.communicate()
p_rc = p.returncode
print("subprocess return code :" + str(p_rc))

os_rc = os.system(cmd)
print("os.system return code :" + str(os_rc))

当我使用 Python 2.7 运行代码时,我得到了“预期的”返回代码:

Python 版本的输出:2.7.16

子进程返回码:-1

os.system返回码:-1

当我使用 Python 3.7 运行代码时,我得到了不同的子进程返回代码(但不是 os.system):

Python 版本的输出:3.7.9

子进程返回码:4294967295

os.system返回码:-1

这种不同的结果是预期的吗?无论是与否,如何使用 Python 3.7 获得我想要的“-1”返回码?

在 Windows 10 上运行 Python 2.7.16 / 3.7.9

提前致谢:-)

尼克

python python-3.x python-2.7 subprocess return-code
© www.soinside.com 2019 - 2024. All rights reserved.