gpt4 book ai didi

python - 如何等待子进程的启动?

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

我执行一个进程(使用Popen),过了一会儿,这个进程执行了一个子进程。
我要做的是等待子进程生成,然后继续执行我的脚本。

我发现的唯一方法是使用 psutil 并轮询直到进程有子进程。

process = psutil.Process(subprocess.Popen(command).pid)
while 0 == len(process.children()):
time.sleep(0.2)

有比轮询 child 更好的方法吗?也许在等待一些事件?

我为此使用 Windows 10。

最佳答案

根据您的评论,您可以让正在吃午餐的进程在启动其子进程时向 STDOUT 写入一些内容,您可以轻松地使用 Popen.check_output() 从中获取 STDOUT 字符串你的父进程。例如,如果您的子进程(命令)写入 STDOUT Subprocess started\n,您可以完全通过 subprocess 模块来完成它:

import subprocess

response = subprocess.check_output(command)
if response.rstrip() == "Subprocess started":
print("Woo! Our sub-subprocess was started...")

但是,如果您的命令 返回多个输出,您可能必须剔除您不感兴趣的那些。您可以通过观察上述 的子进程的 STDOUT 来做到这一点Subprocess started 字符串,类似于:

import subprocess

proc = subprocess.Popen(command, stdout=subprocess.PIPE)
while True: # a loop to read our subprocess STDOUT
line = proc.stdout.readline().rstrip() # read line-by-line
if line == "Subprocess started":
print("Woo! Our sub-subprocess was started...")
break # no need to read the STDOUT anymore

如果您希望从您的命令接收错误消息(例如,无法启动子进程或类似的东西),您也可以捕获 STDERR(或将其通过管道传输到 STDOUT)。

关于python - 如何等待子进程的启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327600/

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