2012-12-20 4 views
7

Ich habe ein Python-Skript, das Eingabe auf stdin nimmt. Ich möchte in IPython.embed fallen zu lassen(), wie folgt aus:Wie debugge ich ein Skript, das Stdin mit Ipython verwendet?

for filepath in sys.stdin: 
    dir = os.path.basename(filepath) 
    ... 
    IPython.embed() 

ich dann das Skript aufrufen wie folgt aus:

find . -type f | thescript.py 

Das Problem ist, dass IPython verwendet stdin für die interaktive Konsole, Das erste, was es sieht, sind die restlichen Pipe-Daten. Dann schließt sich das Rohr und das Terminal tritt aus.

Gibt es eine Möglichkeit, ein Skript zu debuggen, das Stdin mit Ipython verwendet?

Antwort

5

Sie könnten Ihre stdin Eingang in eine Liste lesen Sie zuerst, dann zurückgesetzt stdin: (! Und es funktioniert)

stdin_list = list(sys.stdin) 
sys.stdin = open('/dev/tty') 
for filepath in stdin_list: 
    dir = os.path.basename(filepath) 
    ... 
    IPython.embed() 
+0

Das ist süß. – Reece