引起冻结nosetests的pdb.set_trace()不会进入debugging器
我使用nosetests运行一套testing(.py文件)。 使用经典
import pdb; pdb.set_trace()
鼻子testing运行永远不会完成。 它只是挂在断点已经设置好的地方,但是永远不会进入pdbdebugging器。
任何想法,为什么这将是? 我试着把断点移动到许多不同的位置(其他testing函数,其他文件)都无济于事。
用-s
/ --nocapture
选项运行鼻子,您将能够看到pdb提示符,并与debugging器正常交互。
如果使用命令行,则意味着: –
python manage.py test -s [other-opts-and-args]
鼻子正在捕获输出并redirect它。 所以,这个断点是被打的,但是你根本看不到它。 您需要closures输出redirect,以便debugging输出显示在屏幕上。
鼻子可以为你做这个,如果你使用:
from nose.tools import set_trace; set_trace()
代替:
import pdb;pdb.set_trace()
在我的情况下,flag -s / -nocapture标志仍然没有解决,并把编译器放到pdb中。
你可以考虑的另外一个原因是,如果你使用MySQL等数据库作为testing的一部分,那么它不会被另一个同时进程locking。 就我而言,我已经启动了一个python shell来通过SQL Alchemy查询MySQL数据库,并且locking了这些表。 结果,我的鼻子testing挂了 – 没有运行/退出。
我杀死了锁在桌子上的python进程,鼻子还在嗅探着
> $ ps auxww | grep python | awk'{print $ 2}'| sudo xargs kill -9