2010-05-04 4 views
6

Je suis en train de déboguer du code Python avec pdb. Le code besoin entrée de stdin, comme:Comment pdb code Python avec entrée?

python -m pdb foo.py < bar.in 

Ensuite, les pdb accepteront la bar.in comme des commandes. Comment dire à pdb que l'entrée est pour foo.py et pas pour pdb?

Répondre

1

Un genre de travail brut est de l'ordre de mettre cont au début de bar.in:

cont 
one 
two 
three 
four 


[email protected] ~$ python -m pdb cat.py < bar.in 
> ~/cat.py(1)<module>() 
-> import sys 
(Pdb) one 
two 
three 
four 
The program finished and will be restarted 
> ~/cat.py(1)<module>() 
-> import sys 
(Pdb) 
3

Eh bien, c'est un tweak à la réponse d'Aaron, mais je pense qu'il manque le point que vous souhaitez interactive déboguer à un moment donné, non? Cela fonctionne mais le programme se termine avant que vous ayez une chance de déboguer.

(echo cont;cat bar.in) | python -m pdb foo.py 

Je pense que si vous pouvez modifier foo.py, ne import pdb alors au point intéressant dans foo.py faire pdb.set_trace(), et il suffit d'exécuter python foo.py sans -m pdb et lui donne bar.in normalement

python foo.py < bar.in