Подпроцесс Python: получить все данные стандартного вывода после завершения процесса - PullRequest
0 голосов
/ 18 октября 2018

Я использую подпроцесс в python, чтобы вызвать другой исполняемый файл, записать некоторые данные в его стандартный ввод (закрыть поток, как только все будет записано - именно так подпроцесс узнает, что он получил все), а затем получить все свои данные стандартного вывода после того, какпрекращено - что произойдет через некоторое время.

В псевдокоде:

  • Открыть подпроцесс
  • записать в его стандартный вывод
  • позволить программефиниш
  • извлечение всего, что он выплюнул на стандартный вывод

Я пробовал следующее:

import subprocess
p = subprocess.Popen([cmd], 
stdout=subprocess.PIPE,stdin=subprocess.PIPE)
p.stdin.write(str(data))
p.stdin.close()
p.wait()
result = p.communicate()[0]

Однако я получаю следующую трассировку стека:

    result = p.communicate()[0]
  File "/usr/lib64/python2.7/subprocess.py", line 800, in communicate .
    return self._communicate(input)
  File "/usr/lib64/python2.7/subprocess.py", line 1396, in _communicate
    self.stdin.flush()
  ValueError: I/O operation on closed file

Пожалуйста, сообщите

1 Ответ

0 голосов
/ 18 октября 2018

Использование communicate:

import subprocess
p = subprocess.Popen([cmd], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
result = p.communicate(data)[0]
...