我使用PyQt4.QtWebkit爬行了django application.In中的网页,模块无法爬行的生产环境it.it抛出了错误"manage.py:无法连接到X服务器“
我的Qt课程:
class Render(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit() 从django-shell呼叫:
r = Render(url)当我通过Django-shell(python manage.py shell)调用这个“呈现”类时,呈现函数会抛出错误。你能帮我一下吗?
发布于 2011-12-22 15:44:49
原因是"Xvfb“
同样,我需要在bash中使用xvfb(X虚拟帧缓冲区)运行python程序,
ubuntu@localhost$ xvfb-run python webpage_scrapper.py http://www.google.ca/search?q=navaspot它给出了结果。
现在我的要求是,我需要在python中执行这个shell命令,并等待tine收集结果,我必须处理结果。
请您建议我如何有效地在python上执行这个命令。
发布于 2011-12-21 23:05:12
似乎X显示的环境变量没有被设置,这就是您得到这样的错误的原因。这可能是因为您从环境中运行脚本,而不是绑定到X显示(ssh到server)。
尝试添加显示变量:
DISPLAY=:0.0 python manage.py script还可以从python中设置显示环境变量。您可以在调用PyQt4之前设置它:
import os
os.putenv('DISPLAY', ':0.0')如果生产环境没有运行X服务器,也不可能运行PyQt4.QtWebkit。
发布于 2015-12-26 20:22:38
通常在无头机器上,DISPLAY变量不存在或配置错误。要在这样的机器上工作,可以使用以下方法。作为Ubuntu 14.04-LTS机器的一个例子:
首先安装X服务器:sudo apt-get install xserver-xorg
现在启动X服务器(比如:0):sudo /usr/bin/X :0&
您可以使用像supervisor这样的流程管理器来处理上面的过程。
现在,只需设置DISPLAY环境变量,并确保它对您正在运行的任何依赖于此的进程可用,DISPLAY=:0 python manage.py。
向应用程序提供环境变量的方式取决于您。
https://stackoverflow.com/questions/8595538
复制相似问题