小编Wil*_*agh的帖子

python:nonblocking subprocess,检查stdout

好的,我试图解决的问题是:

我需要运行一个设置了一些标志的程序,检查它的进度并向服务器报告.所以我需要我的脚本以避免程序执行时阻塞,但我还需要能够读取输出.不幸的是,我不认为Popen提供的任何方法都会在没有阻塞的情况下读取输出.我尝试了以下,这有点hack-y(我们是否允许从两个不同的对象读取和写入相同的文件?)

import time
import subprocess
from subprocess import *
with open("stdout.txt", "wb") as outf:
    with open("stderr.txt", "wb") as errf:
        command = ['Path\\To\\Program.exe', 'para', 'met', 'ers']
        p = subprocess.Popen(command, stdout=outf, stderr=errf)
        isdone = False
        while not isdone :
            with open("stdout.txt", "rb") as readoutf: #this feels wrong
                for line in readoutf:
                    print(line)
            print("waiting...\\r\\n")
            if(p.poll() != None) :
                done = True
            time.sleep(1)
        output = p.communicate()[0]    
        print(output)
Run Code Online (Sandbox Code Playgroud)

不幸的是,在命令终止之前,Popen似乎没有写入我的文件.

有谁知道这样做的方法?我并不致力于使用python,但我确实需要在相同的脚本中将POST请求发送到服务器,因此python似乎比shell脚本更容易.

谢谢!将

python subprocess stdout popen nonblocking

4
推荐指数
2
解决办法
5929
查看次数

标签 统计

nonblocking ×1

popen ×1

python ×1

stdout ×1

subprocess ×1