У меня есть следующий script:
import subprocess
arguments = ["d:\\simulator","2332.txt","2332.log", "-c"]
output=subprocess.Popen(arguments, stdout=subprocess.PIPE).communicate()[0]
print(output)
который дает мне b '' как вывод.
Я также пробовал этот script:
import subprocess
arguments = ["d:\\simulator","2332.txt","atp2332.log", "-c"]
process = subprocess.Popen(arguments,stdout=subprocess.PIPE)
process.wait()
print(process.stdout.read())
print("ERROR:" + str(process.stderr))
который дает мне вывод: b '', ERROR: None
Однако, когда я запускаю это в командной строке cmd, я получаю 5 строк текста.
d:\simulator atp2332.txt atp2332.log -c
Я добавил в симулятор окно сообщения, которое появляется, когда оно запускается. Это представлено для всех трех случаев. Поэтому я знаю, что я успешно запускаю симулятор. Однако скрипты python не рассматривают stdout.
Что я делаю неправильно?
Барри.
Если возможно (не бесконечный поток данных), вы должны использовать сообщить(), как указано на странице.
Попробуйте следующее:
import subprocess
arguments = ["d:\\simulator","2332.txt","atp2332.log", "-c"]
process = subprocess.Popen(arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
sout, serr = process.communicate()
print(sout)
print(serr)
Следующий код дает мне вывод текста на stdout. Возможно, вы можете попробовать его, а затем подставить свою команду за помощью
import subprocess
arguments = ["help","2332.txt","atp2332.log", "-c"]
process = subprocess.Popen(arguments,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
print 'Return code', process.returncode
print('stdout:', process.stdout.read())
print("stderr:" + process.stderr.read())
process.stdout.read()
в одной строке иstr(process.stderr)
в следующей во втором примере кода? Разве вы не должны использоватьread()
в обоих случаях?