我在 Windows 8/XP 上使用 Python 2.7。
我有一个程序 A 使用以下代码运行另一个程序 B:
p = Popen(["B"], stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
return
B 运行批处理脚本 C。C 是一个长时间运行的脚本,即使 C 尚未完成,我也希望 B 退出。我已经使用以下代码(在 B 中)完成了它:
p = Popen(["C"])
return
当我运行 B 时,它按预期工作。但是,当我运行 A 时,我希望它在 B 退出时退出。但是即使 B 已经退出,A 也会等到 C 退出。关于正在发生的事情以及可能的解决方案有什么想法?
不幸的是,将 A 更改为 B 的明显解决方案不是一种选择。
这是说明此问题的功能示例代码: https ://www.dropbox.com/s/cbplwjpmydogvu2/popen.zip?dl=1
zip 文件由以下文件组成,其内容如下:
A.py
from subprocess import PIPE, Popen
import sys
def log(line):
with open("log.txt", "a") as logfile:
logfile.write(line)
log("\r\n\r\nA: I'll wait for B\r\n")
p = Popen(["C:\\Python27\\python.exe", "B.py"], stdout=PIPE, stderr=PIPE)
stdout, stderr = p.communicate()
log("A: Done.\r\n")
sys.exit(0)
B.py
from subprocess import Popen, PIPE
import sys
def log(line):
with open("log.txt", "a") as logfile:
logfile.write(line)
log("B: launching C\r\n")
p = Popen(["C.bat"])
log("B: Not waiting for C at all. bye!\r\n")
sys.exit(0)
C.bat
@echo off
echo C: Start long running task : %time% >> "log.txt"
ping -n 10 127.0.0.1>nul
echo C: Stop long running task : %time% >> "log.txt"
非常感谢任何输入。