2012-05-19 8 views
7

Entiendo que puedo ejecutar una secuencia de comandos en IPython a través de run test.py y depurar desde allí.IPython: cómo puedo canalizar algo en una secuencia de comandos de Python

Pero, ¿cómo puedo canalizar una salida en test.py? Por ejemplo, normalmente podría correr en la línea de comando como grep "ABC" input.txt | ./test.py, pero ¿cómo hago lo mismo en IPython?

Gracias!

+0

No estoy familiarizado con IPython. ¿Hay algún motivo por el que no pueda usar sys.stdin o el módulo de entrada de archivos? – Triptych

+0

@Triptych Quiero depurar con esa entrada particular, generada por grep. – CodeNoob

+0

Pruebe usar el [módulo de entrada de archivos] (http://docs.python.org/library/fileinput.html) y vea cómo funciona. Pero para responder realmente a esta pregunta: sí, puedes hacerlo, pero depende de cómo esté escrita la pitón. – Keith

Respuesta

6

Dentro de la secuencia de comandos de Python que debería estar leyendo desde sys.stdin:

import sys 

INPUT = sys.stdin 

def do_something_with_data(line): 
    # Do your magic here 
    ... 
    return result 

def main(): 
    for line in INPUT: 
     print 'Result:', do_something_with_data(line) 

if __name__ == '__main__': 
    main() 

Dentro del intérprete iterativo puede utilizar el módulo de subprocess sys.stdin simulacro.

In[0]: from test.py import * 
In[1]: INPUT = subprocess.Popen(['grep', 'ABC', 'input.txt'], \ 
           stdout=subprocess.PIPE).stdout 
In[2]: main() 

También puede conectar la salida a un archivo y simplemente leer desde el archivo. A efectos prácticos, stdin es solo otro archivo.

In[0]: ! grep "ABC" input.txt > output.txt 
In[1]: INPUT = open('output.txt') 
In[2]: main() 
Cuestiones relacionadas