2012-12-20 2 views
7

J'ai un script python qui prend une entrée sur stdin. Je voudrais tomber dans IPython.embed(), comme ceci:Comment déboguer un script utilisant stdin avec ipython?

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

J'invoquez le script comme ceci:

find . -type f | thescript.py 

Le problème est que IPython utilise stdin pour la console interactive, donc la première chose qu'il voit sont les données de tuyau restantes. Ensuite, le tuyau se ferme et le terminal sort.

Existe-t-il un moyen de déboguer un script qui utilise stdin avec ipython?

Répondre

5

Vous pouvez lire votre entrée stdin dans une liste, puis réinitialiser stdin: (! Et ça marche)

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

C'est mignon. – Reece

Questions connexes