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.4

Ubuntu 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().loadapp.exec_ 时遇到问题。

我敢打赌

self.app = QApplication.instance() 

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

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

【讨论】:

以上是关于Python 脚本在 VirtualBox (py 2.7.10) 上工作,但在 Raspberry Pi 3 (py 2.7.11) 上不工作的主要内容,如果未能解决你的问题,请参考以下文章

python脚本怎么执行

python脚本在linux下的执行

请教如何在没有安装python的环境中执行py脚本

模块作为Python中没有.py的脚本?

如何在另一个目录中运行 python 脚本,而不将脚本写入磁盘?

mac 终端运行python的.py脚本