一些关于 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
提前致谢:-)
尼克