从Django调用subprocess.Popen

时间:2012-12-10 10:49:22

标签: python django

我在Django中使用以下Python代码从Django运行Perl脚本。

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页。

1 个答案:

答案 0 :(得分:0)

您可以尝试更好地了解问题的一件事是暂时使用Django的'runserver'而不是Nginx。这将允许您在页面上查看回溯而不是502。

如果您不确定如何执行此操作,可以使用以下示例:

python manage.py runserver 1.1.1.1:8080

您可以使用“localhost”或您选择的IP替换1.1.1.1,并且可以使用您希望的任何打开的非特权端口替换8080。您可能需要修改设置文件以设置DEBUG=True