python - 如何在烧瓶上运行子进程
问题描述
我目前运行一个烧瓶应用程序,它在注册后为用户创建一个 docker 文件,我如何使用子进程在后台启动docker-compose up -d进程我创建了一个函数 start(),我在之后调用用户单击我的注册表单上的提交按钮
command = 'docker-compose up -d'
def start(command):
subprocess.run(shlex.split(command), cwd=dir, check=True)
但我注意到注册不起作用,因为它正在等待进程在后台完成,我想要的是用户完成表单,然后当用户点击注册按钮时,它应该调用 start()功能,然后显示我的感谢页面
解决方案
根据子流程文档(https://docs.python.org/3/library/subprocess.html#subprocess.run),运行将等待命令完成,然后返回 CompletedProcess 实例。如果你想解决这个问题,你应该给它自己的线程,这将允许 Flask 请求完成(并且你的用户可以获得感谢页面。
import threading
def start(command):
subprocess.run(shlex.split(command), cwd=dir, check=True)
@app.route('/register')
def register():
...
thread = threading.Thread(target=start, args=('docker-compose up -d',))
thread.start()
return jsonify(msg='success'), 200