我试图从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
答案 0 :(得分:0)
看看
https://docs.python.org/2/library/subprocess.html
要使subprocess.call以您正在使用的形式工作,您需要将shell参数设置为True。要确保它有效,只需先在python REPL中尝试subprocess.call。