Python脚本在VirtualBox(py 2.7.10)中工作但在Raspberry Pi 3上没有(py 2.7.11)

时间:2016-06-07 09:44:31

标签: python qt pyqt raspberry-pi pyqt4

我正在尝试在我的Raspberry Pi(Ubuntu MATE)上执行一个脚本,该脚本在我的VM(Oracle VM Virtual Box / Ubuntu 15.10)中运行得非常好。在Raspberry Pi上,我尝试过Raspbian,目前我正在运行Ubuntu MATE(16.04),因为我想知道它是否适用于那里。

基本上我的脚本经过一些列表并获取每个列表中的第一项,在该运行之后它将更改并获取最后一个列表的第二项等以在线搜索信息(航班)。基本上它是“尝试项目的每个组合”结果保存在不同的文件中。

我没有得到错误,这是奇怪的事情。我已经安装了我脚本需要的所有软件包。

它只是通过一个循环而被“卡住”。所以,终端的行为就像它仍在工作,但我没有得到任何更多的输出。我最终得到一个文件,而不是12 ...

我还必须使用 Ctrl + Z 关闭控制台。

有没有人知道可能导致此问题的原因?

代码:https://github.com/tuxeos/flightsearch/blob/master/flightfail.py

输出:https://raw.githubusercontent.com/tuxeos/flightsearch/master/output.md

我从源代码中删除了网站,因为我不想陷入任何麻烦。但其他代码(出发/到达日期和机场代码除外)是相同的。

VirtualBox中执行的输出是相同的,它只是在“Starting timer”之后继续并进入下一个循环。

Ubuntu(VM)上的版本:

  • qt:4.8.6
  • SIP:4.16.9
  • PyQt:4.11.4

Ubuntu MATE(Raspberry Pi 3)上的版本:

  • qt:4.8.7
  • SIP:4.17
  • PyQt:4.11.4

1 个答案:

答案 0 :(得分:0)

编辑:从此回答PyQt: app.exec_() stops all following code from running app.exec_()启动阻塞PyQt4实例,这就是为什么不执行其他代码的原因。您可以通过该主题中列出的多种方式与其进行交互。

接下来的问题是为什么第一次循环迭代会在调用app.exec_()时运行而不会阻塞。

从输出结果来看,它会在Render课程中陷入以下两行之一:

self.mainFrame().load(QUrl(url))  
self.app.exec_()

https://github.com/tuxeos/flightsearch/blob/master/flightfail.py#L30

要澄清一下,这个确切的脚本在您的VM上运行正常吗?

我不熟悉您继承的PyQT4QWebPage类,看起来Raspberry Pi在调用mainframe().loadapp.exec_方面遇到问题第二次。

我敢打赌

self.app = QApplication.instance() 

在循环的第二次迭代中返回相同的实例,并且在已经有一个被调用的实例上调用mainframe().loadapp.exec_是一个问题。 也许尝试重新使用相同的实例?

python调试器pdb是你的朋友(或像PyCharm这样的IDE)。它可以帮助您确切地确定代码的哪一行失败,并且还可以让您调试PyQt4代码以查看它失败的位置。