如何在烧瓶上运行子过程

问题描述 投票:0回答:1

我目前运行一个flask应用程序,注册后为用户创建了一个docker文件,如何在我创建一个函数start()的背景下使用一个子进程启动docker-compose up -d进程),当用户单击我的注册表单上的“提交”按钮后调用

command = 'docker-compose up -d'

def  start(command):
   subprocess.run(shlex.split(command), cwd=dir, check=True)

但是我注意到注册无效,因为它正在等待后台完成流程,我想要的是让用户填写表格,然后当用户单击注册按钮时,它应该称为开始()函数,然后显示我的感谢页面

我目前运行一个flask应用程序,注册后为用户创建了一个docker文件,如何在后台使用子进程启动docker-compose up -d进程,我创建了函数start()...

python flask subprocess
1个回答
1
投票

根据子流程文档(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
© www.soinside.com 2019 - 2024. All rights reserved.