2012-12-10 35 views
3

我在Django中使用以下Python代碼從Django運行Perl腳本。從Django調用subprocess.Popen

def run_command(cmd, input_data=None): 
    assert type(cmd) == list 
    stdout = '' 
    stderr = '' 
    p = subprocess.Popen(cmd, 
         bufsize=1000*1000, 
         stdin=subprocess.PIPE, 
         stderr=subprocess.PIPE, 
         stdout=subprocess.PIPE) 
    if (input_data): 
     p.stdin.write(input_data) 
    p.stdin.close() 
    log("closed stdin") 
    stdout = p.stdout.read() 
    log("read stdout") 
    stderr = p.stderr.read() 
    return (stdout, stderr) 

從Ubuntu的10:04代碼移動到12:04後調用p.stdout.read()已經開始,現在再失敗。當它失敗時,我在日誌文件中看到的最後一件事是closed stdin和nginx顯示502 Bad Gateway頁面。

+0

你試過'stdout,stderr = p.communicate(input_data)'?順便說一句,你可以使用'bufsize = -1'(系統默認)。 – jfs

+0

我剛剛嘗試過,但不幸的是仍然在p.communicate(input_data)上出現故障。 – FunLovinCoder

+0

追溯是什麼? – jfs

回答

0

你可以嘗試更好地看待這個問題的一件事是暫時使用Django的'runserver'而不是Nginx。這將讓你看到的頁面,而不是502

如果你不知道如何做到這一點,你可以用下面的例子在回溯:

python manage.py runserver 1.1.1.1:8080

在那裏你可以將1.1.1.1替換爲'localhost'或您選擇的IP,並且8080可以替換爲您希望打開的任何非特權端口。您可能需要修改您的設置文件以設置DEBUG=True