【发布时间】:2021-09-13 02:01:54
【问题描述】:
我正在构建一个 Flask 应用程序,它允许用户执行 python 脚本并在 http 响应的正文中查看其输出。
以下代码有效,但我无法将子进程的输出返回给父进程,以便返回带有脚本输出的 html 响应。
例如,在app.py 文件中,我使用以下代码来运行执行客户端请求的python 脚本的子进程。
@app.route('/scripts/<script_name>')
def exec_script(script_name):
if os.path.isfile(os.path.join(app.config['SCRIPT_FOLDER'], script_name)):
result = subprocess.run(['python', os.path.join(app.config['SCRIPT_FOLDER'], script_name)], stdout=subprocess.PIPE, cwd=app.config['SCRIPT_FOLDER'])
print(result.stdout.decode('utf-8'))
# return HTML_PAGE
假设请求的脚本example.py产生了一个执行shell命令的进程,我无法将shell命令的输出传递给app.py中运行的进程
example.py
import subprocess
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
我猜发生这种情况的原因是app.py 中创建的进程在脚本中创建的进程之前完成。有没有办法将 shell 命令输出重定向到主应用程序?
【问题讨论】:
标签: python flask subprocess