2012-05-19 12 views
7

Rozumiem, że mogę uruchomić skrypt w IPython przez run test.py i debugować stamtąd.IPython: jak potokować coś w skrypcie Pythona

Ale jak wyprowadzić dane wyjściowe do pliku test.py? Na przykład normalnie mógłbym uruchomić w wierszu poleceń, jak grep "ABC" input.txt | ./test.py, ale jak zrobić to samo w IPython?

Dzięki!

+0

Nie zna IPython. Każdy powód, dla którego nie możesz użyć sys.stdin lub modułu fileinput? – Triptych

+0

@ Triptych Chcę debugować za pomocą tego konkretnego wejścia generowanego przez grep. – CodeNoob

+0

Spróbuj użyć [fileinput module] (http://docs.python.org/library/fileinput.html) i zobacz, jak to działa. Ale aby naprawdę odpowiedzieć na to pytanie: tak, możesz to zrobić, ale to zależy od tego, jak napisany jest pyton. – Keith

Odpowiedz

6

Wewnątrz skryptu Pythona należy czytać od 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() 

Wewnątrz iteracyjny tłumacza można użyć modułu subprocess mock sys.stdin.

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

Można również potokować wyjście do pliku i po prostu odczytać z pliku. Dla celów praktycznych stdin jest po prostu kolejnym plikiem.

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