2012-05-19 4 views
7

Capisco che posso eseguire uno script in IPython tramite run test.py e eseguire il debug da lì.IPython: come faccio a riversare qualcosa in uno script Python

Ma come posso inviare un output a test.py? Ad esempio, normalmente potrei eseguire nella riga di comando come grep "ABC" input.txt | ./test.py, ma come faccio a fare la stessa cosa in IPython?

Grazie!

+0

Non ha familiarità con IPython. Qualche ragione per cui non puoi usare sys.stdin o il modulo fileinput? – Triptych

+0

@Triptych Voglio eseguire il debug con quel particolare input, generato da grep. – CodeNoob

+0

Prova a usare il [modulo file input] (http://docs.python.org/library/fileinput.html) e guarda come va. Ma per rispondere veramente a questa domanda: sì, puoi farlo ma dipende da come è scritto il pitone. – Keith

risposta

6

All'interno dello script Python si dovrebbe essere la lettura da 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() 

All'interno l'interprete iterativo è possibile utilizzare il modulo subprocess sys.stdin finta.

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

È inoltre possibile reindirizzare l'output a un file e leggere semplicemente dal file. Per scopi pratici, stdin è solo un altro file.

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