2012-12-20 9 views
7

Ho uno script python che accetta input su stdin. Mi piacerebbe cadere in IPython.embed(), in questo modo:Come si esegue il debug di uno script che utilizza stdin con ipython?

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

Ho poi richiamare lo script come questo:

find . -type f | thescript.py 

Il problema è che IPython utilizza stdin per la console interattiva, quindi la prima cosa che vede sono i restanti dati di pipe. Quindi, il tubo si chiude e il terminale esce.

C'è un modo per eseguire il debug di uno script che utilizza stdin con ipython?

risposta

5

si poteva leggere l'input standard input in un elenco prima, quindi reimpostare stdin: (! E funziona)

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

che carino. – Reece

Problemi correlati