gpt4 book ai didi

python - 为什么有时 Python 子进程在运行进程后无法获得正确的退出代码?

转载 作者:可可西里 更新时间:2023-11-01 14:14:42 25 4
gpt4 key购买 nike

我正在使用 Python 子进程在 Windows 7 上运行外部脚本。我正在尝试获取退出代码。


在情况 1 中,我运行了一个 python 脚本 test1.py

测试1.py

import sys
sys.exit(24) <--exit code

myscript1.py

import subprocess
process = subprocess.Popen(["python", "C:\\path\\to\\test1.py"], stdout=subprocess.PIPE)
process.wait()
print process.returncode

在 Windows 命令提示符下,当我运行脚本时,我得到以下输出:

>python test1.py
>
>echo %errorlevel%
>24
>
>python myscript1.py
>24

因此,您可以看到在这种情况下子进程能够获得正确的退出代码。


在情况 2 中,我运行一个批处理文件 test2.cmd

测试2.cmd

EXIT /B 56   <--exit code

myscript2.py

import subprocess
process = subprocess.Popen(["C:\\path\\to\\test2.cmd"], stdout=subprocess.PIPE)
process.wait()
print process.returncode

在 Windows 命令提示符下,当我运行脚本时,我得到以下输出:

>test2.cmd
>
>echo %errorlevel%
>56
>
>python myscript2.py
>56

因此,您可以看到在这种情况下,子进程也能够获得正确的退出代码。


在情况 3 中,我运行 SikuliX脚本。

test3.sikuli

xxx xxx (sikuli script here)
xxx xxx
...
exit(16) <--exit code

myscript3.py

import subprocess
process = subprocess.Popen(["C:\\path\\to\\runsikuli.cmd", "-r", "C:\\path\\to\\sikuli-script.sikuli"], stdout=subprocess.PIPE)
process.wait()
print process.returncode

在 Windows 命令提示符下,当我运行脚本时,我得到以下输出:

>C:\path\to\runsikuli.cmd -r C:\path\to\sikuli-script.sikuli
>... (stdout + stderr)
>16
>
>echo %errorlevel%
>16
>
>python myscript3.py
>0

在情况 3 中,当我在命令提示符下手动运行脚本时,它能够设置 %errorlevel%。当我使用 Python 子进程运行脚本时,子进程无法获得正确的退出代码。它总是返回 0。

为什么python子进程在case 3中获取exit code失败?

最佳答案

作为your comment says如果您运行相同的命令,那么命令提示符和使用 Python subprocess 模块都会产生相同的结果(0 退出代码)。

您可能会看到不同的退出代码,因为您使用了不同 命令。这里不足为奇。 Python subprocess 模块返回正确的(对于给定命令)退出代码。


如果它没有返回正确的退出状态,那么您可以在 cmd.exe 命令的末尾添加 & exit 作为获得正确返回代码的变通方法,请参阅 "subprocess on Windows: wrong return code with shell=True"在 Python 问题跟踪器上:

from subprocess import check_call

check_call(r'C:\path\to\runsikuli.cmd -r C:\path\to\sikuli-script.sikuli & exit',
shell=True)

关于python - 为什么有时 Python 子进程在运行进程后无法获得正确的退出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com