manage.py: не удается подключиться к X-серверу - PullRequest
2 голосов
/ 21 декабря 2011

Я использовал PyQt4.QtWebkit для сканирования веб-страницы в моем приложении django. В производственной среде этот модуль не работает для его сканирования. Он выдает ошибку «manage.py: невозможно подключитьсяна X server "

Мой класс 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)

когда я вызываю этот класс" Render "через django сDjango-shell (python manage.py shell), функция render выдает ошибку.не могли бы вы помочь мне в этом?

Ответы [ 3 ]

7 голосов
/ 22 декабря 2011

Причина: "Xvfb"

Мне нужно запустить мою программу на python в оболочке bash с аналогичным образом xvfb (X буфер виртуальных фреймов),

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

Это дает результат.

Теперь мое требование состоит в том, чтобы мне нужно было выполнить эту команду оболочки в python и ждать, пока зубец соберет результат. Я должен обработать результат.

Не могли бы вы предложитья для эффективного выполнения этой команды на Python.

1 голос
/ 22 декабря 2011

Похоже, переменные окружения для X display не установлены, и именно поэтому вы получаете такую ​​ошибку. Это может произойти из-за того, что вы запускаете скрипт из среды, которая не привязана к X display (ssh к серверу).

Попробуйте добавить переменную дисплея:

DISPLAY=:0.0 python manage.py script

Также возможно установить переменную окружения DISPLAY из python. Вы можете установить его перед вызовом PyQt4:

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

Также может быть невозможно запустить PyQt4.QtWebkit, если в вашей производственной среде не запущен X-сервер.

0 голосов
/ 26 декабря 2015

Обычно на безголовых машинах переменная DISPLAY отсутствует или неправильно сконфигурирована.Для работы на таких машинах вы можете использовать следующий подход.В качестве примера для Ubuntu 14.04-LTS машин:

Первая установка X сервер: sudo apt-get install xserver-xorg

Теперь запустите сервер X (скажем, на :0): sudo /usr/bin/X :0&

Вы можете использовать менеджеры процессов, такие как supervisor, для управления вышеуказанным процессом.

Теперь просто установите переменную среды DISPLAY и убедитесь, что она доступна для любых процессов, которые вы выполняете, которые зависят отthis, DISPLAY=:0 python manage.py

Способ предоставления переменных окружения для вашего приложения зависит от вас.

...