python:在子进程中查找';s输出,保持其运行并继续

python:在子进程中查找';s输出,保持其运行并继续,python,subprocess,Python,Subprocess,我不得不调用一个shell命令 subprocess.Popen(command, stderr=subprocess.STDOUT, stdout=subprocess.PIPE) 我做到了。以及: 而且,这个命令会打印很多东西,比如启用了verbose,然后当它完成它的工作时,它会打印(写入)blah:Ready 我必须调用这个命令,等待“Ready”文本并让它在后台运行,然后让其余的代码运行 我试过这种东西,但都没用 。。。 完成=错误 将subprocess.Popen(命令,stde

我不得不调用一个shell命令

subprocess.Popen(command, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
我做到了。以及:

而且,这个命令会打印很多东西,比如启用了verbose,然后当它完成它的工作时,它会打印(写入)
blah:Ready

我必须调用这个命令,等待“Ready”文本并让它在后台运行,然后让其余的代码运行

我试过这种东西,但都没用

。。。
完成=错误
将subprocess.Popen(命令,stderr=subprocess.STDOUT,STDOUT=subprocess.PIPE)作为进程:
虽然没有这样做:
x=进程标准输出读取()
x=x.find('Ready')
如果x>-1:
完成=正确
打印(“是啊,这个子流程已经完成了它的工作,现在正在后台运行”)
#代码的其余部分
我在python终端上运行了类似的(编辑过的)代码,我想我甚至无法访问(读取)子流程的终端。因为。。。


我原以为它会显示这个子进程打印的每一行,但是。它只是在等待。

您的问题是
proc.stdout.read()
。这将读取子流程的整个输出,直到它终止(通常)才知道它。尝试以下方法:

output=b''
虽然没有这样做:
输出+=过程标准输出读取(1)
x=输出。查找(b'Ready')
如果x>-1:
完成=正确
这将一次读取进程的标准输出一个字符,因此不必等待它完成


请注意,在上下文管理器中使用
Popen
with
block)将导致程序在退出
with
块之前等待子进程终止,因此不会让它运行超过该点。现在还不清楚这是否是期望的行为。

谢谢,这行必须
output=output+str(proc.stdout.read(1),'utf-8')
,因为如果没有utf-8,输出会像'a'、''b'、'i'、't'、''、'w'、'e'、'i'、'r'、'd'。而且找不到工作。。。它与
output=output+str(proc.stdout.read(1),'utf-8')
一起工作。谢谢:)