使用 Python 子进程不起作用,但直接在 shell 中调用可以
Using Python subprocess doesn't work, but calling directly in the shell does
我正在尝试 运行 来自 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 '}" % 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 '}
running
看看
https://docs.python.org/2/library/subprocess.html
要使 subprocess.call 在您使用的表单中工作,您需要将 shell 参数设置为 True。为确保它有效,请先在 python REPL 中尝试 subprocess.call。
我正在尝试 运行 来自 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 '}" % 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 '}
running
看看
https://docs.python.org/2/library/subprocess.html
要使 subprocess.call 在您使用的表单中工作,您需要将 shell 参数设置为 True。为确保它有效,请先在 python REPL 中尝试 subprocess.call。