Как разрешить печать выходных данных в интерактивной оболочке с помощью подпроцесса

#python

#python

Вопрос:

 >>> import subprocess
>>> subprocess.Popen("pwd")
<subprocess.Popen object at 0xa7692cc>
>>> subprocess.call(["ls", "-l"])
0
  

Я попробовал приведенную выше команду в интерактивной оболочке Python и ожидаю увидеть вывод
внутри среды оболочки. Однако в итоге получается только несколько возвращаемых значений.

Что я должен сделать, чтобы возвращаемые результаты печатались внутри оболочки?

Ответ №1:

Сначала было бы полезно прочитать документацию.

 p = subprocess.Popen('pwd', stdout = subprocess.PIPE)
p.communicate() # returns (stdout, None)
  

Ответ №2:

Cat Plus Plus прав, однако, если вы предпочитаете call функцию, вы также можете сделать это следующим образом:

 import subprocess
import sys

subprocess.call('pwd', stdout=sys.stdout)   # outputs results of `pwd` to stdout
  

Комментарии:

1. import subprocess, sys subprocess.call('pwd', stdout=sys.stdout) Traceback (most recent call last): File "<input>", line 1, in <module> File "/usr/lib/python2.6/subprocess.py", line 480, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.6/subprocess.py", line 626, in __init__ errread, errwrite) = self._get_handles(stdin, stdout, stderr) File "/usr/lib/python2.6/subprocess.py", line 983, in _get_handles c2pwrite = stdout.fileno() AttributeError: PseudoFileOut instance has no attribute 'fileno'

2. Что вы имеете в виду? Похоже, я не могу запустить решение, предоставленное Adam.