使用xml.sax.parseString时遇到一个奇怪的问题。 Python语句:
parseString(Page, StatusHandler())
执行时,挂起python线程,执行就停止了。如果我进入代码,我会:
def parseString(string, handler, errorHandler=ErrorHandler()):
try:
from cStringIO import StringIO
这最后一句话是罪魁祸首。我可以看到没有循环,因为以下运行的输出只是停止:
python -m trace --trace testFramework.py
所以要做一点测试我添加了
from cStringIO import StringIO
from xml.sax.xmlreader import InputSource
...
src = InputSource()
src.setByteStream(StringIO("<>"))
parseString(Page, StatusHandler())
但仍然是parseString语句挂起了线程。我在64位Ubuntu 12.04.1或64位Ubuntu 12.10上使用Python 2.7。有没有人对正在发生的事情或者如何调试这个有任何想法?
更新: 早些时候我试图保持描述简单但我现在发现了一个问题的工作轮,似乎创造了更多的问题,所以这里是一个更全面的描述: 我有一个“测试工具”,其中包括“测试中的软件”。 “受测试的软件”创建了一个“网络访问”线程来处理对网页的访问,它是挂起的“网络访问”线程。我有三个其他线程由“测试工具”启动,虚拟串口的主端等待“被测软件”通过虚拟串口发送帧,“被测软件”的主线程定期发送数据这些串口。我的工作循环在自己的过程中启动被测软件:
# Here we start the software under test
os.system("python main.py&")
#import main
现在“网络访问”线程没有挂起!所以问题是,如果我导入我的“测试软件”,为什么导入(来自cStringIO导入StringIO)会挂起,但如果我在自己的进程中启动“测试中的软件”,则不会挂起!! ??