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

Django manage.py:无法连接到X服务器,django,django-admin,pyqt4,django-manage.py,Django,Django Admin,Pyqt4,Django Manage.py,我已使用PyQt4.QtWebkit在django应用程序中对网页进行爬网。在生产环境中,该模块无法对网页进行爬网。它抛出错误“manage.py:无法连接到X服务器” 我的Qt类: class Render(QWebPage): def __init__(self, url): self.app = QApplication(sys.argv) QWebPage.__init__(self) self.loadFinished.connect(self._loadFi

我已使用PyQt4.QtWebkit在django应用程序中对网页进行爬网。在生产环境中,该模块无法对网页进行爬网。它抛出错误“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)通过django调用这个“Render”类时,Render函数抛出错误。
您能帮我一下吗?

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

尝试添加显示变量:

DISPLAY=:0.0 python manage.py script
也可以从python设置显示环境变量。您可以在调用PyQt4之前进行设置:

import os
os.putenv('DISPLAY', ':0.0')
如果您的生产环境没有运行X server,则也可能无法运行PyQt4.QtWebkit。

原因是

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

ubuntu@localhost$ xvfb-run python webpage_scrapper.py http://www.google.ca/search?q=navaspot
它给出了结果

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


请建议我在python上有效地执行此命令。

通常在无头机器上,
DISPLAY
变量不存在或配置错误。要在这些机器上工作,可以使用以下方法。作为
ubuntu14.04-LTS
机器的示例:

首先安装
X
服务器:

sudo apt get安装xserver xorg

现在启动
X
服务器(比如在
:0
):

sudo/usr/bin/X:0&

您可以使用流程管理器(如
supervisor
)来处理上述流程

现在只需设置
DISPLAY
环境变量,并确保它可用于依赖此变量运行的任何进程,

DISPLAY=:0 python manage.py


为应用程序提供环境变量的方式由您决定。

错误是什么?for me works“manage.py:无法连接到X服务器”仍然收到“manage.py:无法连接到X服务器:0.0”此django命令“DISPLAY=:0.0 python manage.py shell--settings=PROD_settings”的错误消息?即使我尝试了以上两种方法,更改后的错误仍然是“manage.py:无法连接到X服务器:0.0”但它在我的本地机器上工作。这是有效的。不过,记住先从马吕斯的答案中删除“os.putenv('DISPLAY',':0.0')”!