【发布时间】:2015-07-07 14:56:31
【问题描述】:
我正在尝试从 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
【问题讨论】:
-
是因为您没有来自该视图的
return任何 http 响应吗? -
在最终代码中,我做了一些更改,例如设置 int(vmid),将其锁定到主服务器的 IP,并在执行任何命令之前对其添加密钥检查 :)
标签: python flask subprocess