Хорошо, проблема, которую я пытаюсь решить, заключается в следующем:
Мне нужно запустить программу с установленными флагами, проверить ее ход и доложить на сервер.Поэтому мне нужен мой сценарий, чтобы избежать блокировки во время выполнения программы, но мне также нужно иметь возможность прочитать вывод.К сожалению, я не думаю, что какой-либо из методов, доступных в Popen, будет читать вывод без блокировки.Я попробовал следующее, что немного хакерски (мы можем читать и писать в один и тот же файл из двух разных объектов?)
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)
К сожалению, Попен, похоже, не пишет в мойдо тех пор, пока команда не завершится.
Кто-нибудь знает способ сделать это?Я не посвящен использованию Python, но мне нужно отправлять запросы POST на сервер в том же сценарии, поэтому Python казался более простым выбором, чем, скажем, сценарии оболочки.
Спасибо!Будет