2011-12-21 9 views
2

PyQt4.QtWebkit을 사용하여 장고 응용 프로그램에서 웹 페이지를 크롤링했습니다. 프로덕션 환경에서 모듈이 크롤링하지 못합니다 .it는 "manage 평 : 렌더링 "C"내가이를 호출 할 때manage.py : X 서버에 연결할 수 없습니다.

r = Render(url) 

는 : 장고 쉘에서 전화

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() 

내 Qt는 클래스 "X 서버에 연결할 수 없습니다 Django를 통해 장고 (django-shell) (python manage.py 셸)에서 렌더링 기능이 오류를 throw합니다. 도와 주시겠습니까?

+0

무엇이 오류입니까? 나를 위해 작동 – Goin

+0

"manage.py : X 서버에 연결할 수 없습니다" – Nava

답변

7

이유 "Xvfb"

난 Xvfb가 함께 배시 쉘 내 파이썬 프로그램을 실행해야

(X 가상 프레임 버퍼) 마찬가지로 ,

[email protected]$ xvfb-run python webpage_scrapper.py http://www.google.ca/search?q=navaspot 

그것은 결과를 제공한다.

내 요구 사항은 파이썬에서이 셸 명령을 실행하고 결과를 수집하기 위해 tine을 기다려야합니다. 결과를 처리해야합니다.

파이썬에서이 명령을 효과적으로 실행 해 주시기 바랍니다.

+0

This works.Remember 제거 "os.putenv ('DISPLAY', ': 0.0')"마리우스의 대답을 먼저하지만! –

+0

이것이 실제로 작동합니다, 감사합니다! – Jim

1

X 디스플레이와 비슷한 환경 변수가 설정되지 않았으므로 그러한 오류가 발생합니다. 그것은 X 디스플레이 (서버에서 ssh)에 바인딩되지 않은 환경에서 스크립트를 실행 중이기 때문에 발생할 수 있습니다.

시도 추가 디스플레이 변수를

DISPLAY=:0.0 python manage.py script 

파이썬 DISPLAY 환경 변수를 설정할 수있다. 당신은 PyQt4를 호출하기 전에 설정할 수 있습니다 : 프로덕션 환경은 X 서버를 실행하지 않을 경우

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

또한 PyQt4.QtWebkit을 실행하는 것이 가능하지 않을 수 있습니다.

+0

"manage.py : X 서버에 연결할 수 없습니다 : 0.0"이 django 명령에 대한 오류 "DISPLAY = : 0.0 python manage.py shell - -settings = PROD_settings "? – Nava

+0

조차도 위의 두 가지 방법을 시도했지만 변경된 오류는 "manage.py : X 서버에 연결할 수 없습니다 : 0.0"이지만 내 로컬 컴퓨터에서 작동합니다. – Nava

0

일반적으로 헤드리스 컴퓨터에서는 DISPLAY 변수가 없거나 잘못 구성되었습니다. 이러한 시스템에서 작업하려면 다음 접근 f}을 사용할 수 있습니다. Ubuntu 14.04-LTS 기계에 대한 예를 들어 :

먼저 X 서버 설치 : sudo apt-get install xserver-xorg

는 이제 X 서버를 시작을 (:0에서 말) : sudo /usr/bin/X :0&

당신은 위의를 처리 할 수 ​​supervisor 같은 프로세스 관리자를 사용할 수 있습니다 방법.

지금 그냥 DISPLAY=:0 python manage.py

응용 프로그램이 당신 개까지입니다에 당신이 환경 변수를 제공하는 방법을 DISPLAY 환경 변수를 설정하고이에 따라 실행중인 모든 프로세스에 사용할 수 있는지 확인합니다.

관련 문제