我有一个错误在我的计划,并希望将其签出使用调试。 在我的IDE(WingIDE)我有一个调试功能。 但我不能使用电话从外壳程序。 所以我使用Python模块PDB。 我的应用程序是单线程的。
我已研究过的代码是不同的行为在发布VS调试模式 ,但似乎不同的东西给我。
我有限的IT沿着这下面的代码。
我做了什么 :
我创建了一个短方法不使用IDE时,它才会被调用。
def set_pdb_trace():
run_in_ide = not sys.stdin.isatty()
if not run_in_ide:
import pdb; pdb.set_trace() # use only in python interpreter
这项工作很好,我用它在很多情况下。
我想调试下面的方法:
import sys
import os
import subprocess32
def call_backported():
command = 'lsb_release -r'
timeout1 = 0.001 # make value too short, so time-out will enforced
try:
p = subprocess32.Popen(command, shell=True,
stdout=subprocess32.PIPE,
stderr=subprocess32.STDOUT)
set_pdb_trace()
tuple1 = p.communicate(input=b'exit %errorlevel%\r\n', timeout=timeout1)
print('No time out')
value = tuple1[0].decode('utf-8').strip()
print('Value : '+ value)
except subprocess32.TimeoutExpired, e:
print('TimeoutExpired')
说明。 我想打电话给子与超时。 对于Python 3.3+它是建立在,但我的应用程序能够使用Python2.7也运行。 所以我用https://pypi.python.org/pypi/subprocess32/3.2.6作为一个补丁包。 要读取返回值我曾经如何从子有用的结果?
如果没有超时,设置超时FE 1秒的方法按预期工作。 的结果值和“否超时”被打印出来。
我要强制超时,所以我设置的时间很短的时间0.001。 所以,现在只有“TimeoutExpired”应打印。
我想执行这个壳。 当如果第一评论出线#set_pdb_trace()“TimeoutExpired”被印刷,所以预期行为。
现在我去掉set_pdb_trace(),并在命令行下执行。
调试器显示器,我按“C”(继续)和“不超时”,结果被打印。 这个结果是没有调试不同的,那么。 所述产生输出为:
bernard@bernard-vbox2:~/clones/it-should-work/unit_test$ python test_subprocess32.py
--Return--
> /home/bernard/clones/it-should-work/unit_test/test_subprocess32.py(22)set_pdb_trace()->None
-> import pdb; pdb.set_trace() # use only in python interpreter
(Pdb) c
No time out
Value : Release: 13.10
bernard@bernard-vbox2:~/clones/it-should-work/unit_test$
这怎么可能? 如何解决?