Подпроцесс Popen переназначает вывод - PullRequest
3 голосов
/ 10 марта 2019

Я пытаюсь выполнить командные оболочки с Popen в Python 2.7. Я могу получить стандартный вывод и распечатать его, но только один раз. Когда я пытаюсь напечатать его снова или переназначить выходную переменную другой, она пуста. Вот мой код:

from subprocess import Popen, PIPE

p = Popen(['cd /home/pi/GDRIVE; drive push -quiet -ignore-conflict PiDocs'],shell=True, stdout=PIPE)
output = p.communicate()[0]
print output
if p.returncode != 0:
  print p.returncode
  print "Return code was not equal to 0"
  print output
  print "now reassigning output"
  mailtext = output
  print "print output again"
  print output
  print "mailtext is next"
  print mailtext
else:
  print p.returncode
  print "Return code was equal to 0"

Результаты с правильной командой (PiDocs - правильное имя папки):

 0
 Return code was equal to 0

Результаты, если недопустимая команда (в качестве неверного имени папки использовались PDoc):

'/PDocs' aka '/home/pi/GDRIVE/PDocs' doesn't exist locally nor remotely 

8
Return code was not equal to 0

now reassigning output 
print output again

mailtext is next

После того, как я распечатаю стандарт, он больше не будет распечатываться или присваиваться mailtext и печатать. Есть предложения?

...