manage.py:无法连接到X服务器

时间:2011-12-21 19:57:13

标签: django django-admin pyqt4 django-manage.py

我已经使用 PyQt4.QtWebkit 来抓取我的django应用程序中的网页。在生产环境中该模块无法抓取它。它会抛出错误“manage.py:can not not连接到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)通过django调用这个“Render”类时,render函数会抛出错误。 你能帮帮我吗?

3 个答案:

答案 0 :(得分:7)

原因是"Xvfb"

我需要使用xvfb(X虚拟帧缓冲区)在bash shell中运行我的python程序 同样地,

ubuntu@localhost$ xvfb-run python webpage_scrapper.py http://www.google.ca/search?q=navaspot

它给出了结果。

现在我的要求是我需要在python中执行这个shell命令并等待tine来收集结果。我必须处理结果。

请你建议我有效地在python上执行这个命令。

答案 1 :(得分:1)

似乎没有设置X显示的环境变量,这就是你得到这样的错误的原因。之所以会发生这种情况,是因为您正在从环境运行脚本,而不是绑定到X显示(ssh到服务器)。

尝试添加显示变量:

DISPLAY=:0.0 python manage.py script

也可以从python设置DISPLAY环境变量。您可以在调用PyQt4之前设置它:

import os
os.putenv('DISPLAY', ':0.0')

如果您的生产环境没有运行X服务器,也可能无法运行PyQt4.QtWebkit。

答案 2 :(得分:0)

通常在无头机器上,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

您向应用程序提供环境变量的方式取决于您。