2011-12-21 13 views
2

PyQt4.QtWebkit私のdjangoアプリケーションでWebページをクロールするために使用しました。そのモジュールがそれをクロールするように動作しないプロダクション環境では、 "manage .py:レンダリング "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シェル(python manage.pyシェル)でlassすると、render関数がエラーをスローします。 これで私を助けてもらえますか?

+0

エラーは何ですか?私にとっては – Goin

+0

"manage.py:Xサーバに接続できません" – Nava

答えて

7

理由は"Xvfb"

である私はそれが結果を与える

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

、同様に XVFBでbashシェルで私のpythonプログラムを実行する必要があります(X仮想フレームバッファ)。

私の要件は、pythonでこのシェルコマンドを実行し、結果を収集するのを待つ必要があります。結果を処理する必要があります。

私はこのコマンドをPythonで効果的に実行することを提案してください。

+0

これは作品です。マリウスの答えから「os.putenv( 'DISPLAY'、 ':0.0')」を削除することを忘れないでください! –

+0

これは本当にありがとう! – Jim

1

Xディスプレイのような環境変数が設定されていないと思われます。そのため、このようなエラーが発生します。これは、Xディスプレイ(sshからサーバー)にバインドされていない環境からスクリプトを実行しているために発生します。表示変数を追加

試してみてください。

DISPLAY=:0.0 python manage.py script 

Pythonから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変数が存在しないか、または誤って構成されています。このようなマシンで作業するには、次の方法を使用できます。 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

関連する問題