Django manage.py:无法连接到X服务器
我已使用PyQt4.QtWebkit在django应用程序中对网页进行爬网。在生产环境中,该模块无法对网页进行爬网。它抛出错误“manage.py:无法连接到X服务器” 我的Qt类: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
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')”!