python – как передать вывод с помощью popen?

Я хочу pipe вывести свой файл с помощью popen, как мне это сделать?

test.py:

while True:
  print"hello"

а.py :

import os  
os.popen('python test.py')

Я хочу передать вывод, используя os.popen. как я могу сделать то же самое?


person sami    schedule 27.12.2010    source источник


Ответы (3)


Прежде всего, os.popen() устарел, вместо этого используйте модуль подпроцесса.

Вы можете использовать его следующим образом:

from subprocess import Popen, PIPE

output = Popen(['command-to-run', 'some-argument'], stdout=PIPE)
print output.stdout.read()
person atx    schedule 27.12.2010
comment
Пример показывает это. Вы должны использовать: Popen(['python', 'test.py'], stdout=PIPE) - person atx; 27.12.2010
comment
В соответствии с документацией подпроцесса здесь и другим ответом , следует использовать proc.communicate()[0] вместо stdout.read(), чтобы избежать взаимной блокировки - person storm_m2138; 29.10.2014

Используйте модуль subprocess, вот пример:

from subprocess import Popen, PIPE

proc = Popen(["python","test.py"], stdout=PIPE)
output = proc.communicate()[0]
person ismail    schedule 27.12.2010
comment
он будет зависать до тех пор, пока не произойдет MemoryError. Если выход не ограничен (как в случае test.py), то .communicate() использовать не следует. Вместо этого читайте постепенно, используя proc.stdout напрямую, см. Python: чтение потокового ввода из subprocess.communicate() - person jfs; 08.07.2016

Это напечатает только первую строку вывода:

a.py:

import os
pipe = os.popen('python test.py')
a = pipe.readline()
print a

... и это напечатает их все

import os
pipe = os.popen('python test.py')
while True:
    a = pipe.readline()
    print a

(Я изменил test.py на это, чтобы было легче увидеть, что происходит:

#!/usr/bin/python
x = 0
while True:
    x = x + 1
    print "hello",x

)

person david van brink    schedule 27.12.2010