2010-12-27 17 views
6

Quiero pipe salida de mi archivo usando popen, ¿cómo puedo hacer eso?python: ¿cómo canalizar la salida usando popen?

test.py:

while True: 
    print"hello" 

a.py:

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

Quiero canalizar la salida usando os.popen. ¿cómo puedo hacer lo mismo?

Respuesta

13

En primer lugar, os.popen() está en desuso, utilice el módulo de subproceso en su lugar.

Se puede utilizar la siguiente manera:

from subprocess import Popen, PIPE 

output = Popen(['command-to-run', 'some-argument'], stdout=PIPE) 
print output.stdout.read() 
+0

gracias pero ¿y si quiero correr popen? y ¿qué es esto algunos argumentos? – sami

+1

El ejemplo muestra esto. Deberías usar: Popen (['python', 'test.py'], stdout = PIPE) – atx

+0

gracias malfy por la respuesta. comprobaré lo mismo. – sami

12

utilizar el módulo subprocess, aquí está un ejemplo:

from subprocess import Popen, PIPE 

proc = Popen(["python","test.py"], stdout=PIPE) 
output = proc.communicate()[0] 
+1

se bloqueará hasta que ocurra MemoryError. Si la salida es ilimitada (como en el caso 'test.py') entonces no se debe usar' .communicate() '. Lea incrementalmente usando 'proc.stdout' directamente en su lugar, vea [Python: lea la entrada de transmisión de subprocess.communicate()] (http://stackoverflow.com/a/17698359/4279) – jfs

2

Esto imprimirá sólo la primera línea de salida:

una .py:

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

... y esto va a imprimir todos ellos

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

(he cambiado test.py a esto, para que sea más fácil ver lo que está pasando:

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

)

+0

gracias david van brink – sami

Cuestiones relacionadas