使用Python子进程不起作用,但直接在shell中调用

时间:2015-07-07 14:56:32

标签: python flask subprocess

我试图从Flask路线运行子进程,但是我收到500错误。当我直接从shell运行它时,它工作。为什么它不起作用?

import subprocess
from flask import Flask
app = Flask(__name__)

@app.route('/status/<vmid>')
def status(vmid):
    cmd = "/usr/bin/virsh list --all | grep kvm%s | awk {'print $3'}" % vmid
    p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    out,err = p.communicate()
    return out

if __name__ == '__main__':
    app.run(host='0.0.0.0')

通过Flask运行时出现500错误:

root@nc2-kvm:~# python status.py
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
(500 error)

直接在shell中运行时可以正常工作:

root@nc2-kvm:~# virsh list --all | grep kvm180 | awk {'print $3'}
running

1 个答案:

答案 0 :(得分:0)

看看

https://docs.python.org/2/library/subprocess.html

要使subprocess.call以您正在使用的形式工作,您需要将shell参数设置为True。要确保它有效,只需先在python REPL中尝试subprocess.call。