如何在输入时调试Python代码?

6 投票
2 回答
1227 浏览
提问于 2025-04-15 22:19

我正在用pdb调试Python代码。这个代码需要从标准输入(stdin)获取输入,比如:

python -m pdb foo.py < bar.in

然后pdb会把bar.in当作命令来处理。请问怎么告诉pdb,这些输入是给foo.py的,而不是给pdb本身的呢?

2 个回答

1

一种比较笨的方法是在 bar.in 的开头加上 cont

cont
one
two
three
four


aaron@ares ~$ 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

好吧,这个是对Aaron回答的一个小调整,但我觉得它没有抓住重点,你想要在某个时刻进行交互式调试,对吧?这个方法是可行的,但程序在你有机会调试之前就退出了。

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

我觉得如果你能编辑foo.py文件,可以在文件中加入import pdb,然后在foo.py中你觉得有趣的地方加上pdb.set_trace(),接着就直接运行python foo.py,不需要加-m pdb,然后正常给它输入bar.in。

python foo.py < bar.in

撰写回答