Не удается захватить стандартный вывод из приложения

1

У меня есть следующий 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.

Что я делаю неправильно?

Барри.

  • 0
    Почему у вас process.stdout.read() в одной строке и str(process.stderr) в следующей во втором примере кода? Разве вы не должны использовать read() в обоих случаях?
  • 0
    Да, ты прав. Когда я пытаюсь: <pre> process = subprocess.Popen (arguments, stdout = subprocess.PIPE, stderr = subprocess.PIPE) </ pre>, я также получаю пустую строку для stderr.
Теги:
python-3.x

2 ответа

2

Если возможно (не бесконечный поток данных), вы должны использовать сообщить(), как указано на странице.

Попробуйте следующее:

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)
1

Следующий код дает мне вывод текста на 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())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню