Python 脚本在 VirtualBox (py 2.7.10) 上工作,但在 Raspberry Pi 3 (py 2.7.11) 上不工作
Posted
技术标签:
【中文标题】Python 脚本在 VirtualBox (py 2.7.10) 上工作,但在 Raspberry Pi 3 (py 2.7.11) 上不工作【英文标题】:Python-script working in VirtualBox (py 2.7.10) but not on Raspberry Pi 3 (py 2.7.11) 【发布时间】:2016-06-07 09:44:31 【问题描述】:我正在尝试在我的 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.4Ubuntu MATE (Raspberry Pi 3) 上的版本:
qt:4.8.7 SIP:4.17 PyQt:4.11.4【问题讨论】:
【参考方案1】:编辑:来自这个答案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 上运行正常吗?
我不熟悉 PyQT4
或您继承的 QWebPage
类,看起来 Raspberry Pi 在第二次调用 mainframe().load
或 app.exec_
时遇到问题。
我敢打赌
self.app = QApplication.instance()
在循环的第二次迭代中返回相同的实例,并且在已经调用其中之一的实例上调用 mainframe().load
或 app.exec_
是一个问题。
也许尝试重新使用同一个实例?
python 调试器pdb
是您的朋友(或像 PyCharm 这样的 IDE)。它将帮助您准确识别代码的哪一行失败,还可以让您调试PyQt4
代码以查看失败的位置。
【讨论】:
以上是关于Python 脚本在 VirtualBox (py 2.7.10) 上工作,但在 Raspberry Pi 3 (py 2.7.11) 上不工作的主要内容,如果未能解决你的问题,请参考以下文章