Python脚本在调用bash脚本时被冻结
我有一个flask应用程序,它调用python函数my_funct.py,其代码如下:Python脚本在调用bash脚本时被冻结,python,bash,flask,Python,Bash,Flask,我有一个flask应用程序,它调用python函数my_funct.py,其代码如下: container_logs = 'bash train.sh' subprocess.call([container_logs],shell=True) return result 问题是my_funct.py在子流程行被冻结: subprocess.call([container_logs],shell=True) 因此,我的烧瓶应用程序也被冻结,等待响应: resp = requests.post(
container_logs = 'bash train.sh'
subprocess.call([container_logs],shell=True)
return result
问题是my_funct.py在子流程行被冻结:
subprocess.call([container_logs],shell=True)
因此,我的烧瓶应用程序也被冻结,等待响应:
resp = requests.post(url,data=json.dumps(data), headers=headers )
我知道从“bash train.sh”调用的过程在我获得输出文件后已经完成,但是脚本一直在无限期地等待
编辑
当我直接从终端调用bash train.sh时,脚本持续运行大约10分钟
我在脚本末尾添加了以下内容:
echo 'done'
exit 0
echo 'has not exit'
在终端中,我得到的是“完成”打印,而不是“没有出口”,从那里我假设脚本正在完成:
但API方面的问题仍然存在 实际的问题可能在于如何调用脚本,但如果不看脚本,我们无法判断
同时,这肯定是一个错误:
subprocess.call(['bash train.sh'],shell=True)
你想要哪一个
subprocess.call(['bash', 'train.sh']) # shell=False
或
不能将列表与shell=True
组合,因为shell需要一个字符串而不是列表作为要运行的命令序列
如果您的脚本是可执行的,并且具有有效的shebang,那么您实际上需要
subprocess.call(['train.sh'])
没有调用Python程序的配合,Bash无法设置Python变量result
如果您的脚本试图读取标准输入,可以尝试
subprocess.call(['train.sh'], stdin=subprocess.DEVNULL)
output = subprocess.check_output(['train.sh'])
如果您的脚本试图将某些内容写入标准输出,请尝试
subprocess.call(['train.sh'], stdin=subprocess.DEVNULL)
output = subprocess.check_output(['train.sh'])
这都是推测,;您的问题可能应该以不清楚的方式结束,但至少这会让您有更多的东西来更新您的问题和/或代码。为了安全起见:您确定bash脚本实际上已经完成了吗?它没有在关闭前等待输入或者其他什么?它给出输出并不意味着它已经完成;)另外,您是否在Bash脚本末尾使用了
exit 0
?@SimonKlaver是的,我确信我刚刚在脚本末尾添加了一个屏幕截图question@Bayou不,我没有在任何地方使用出口0,也不确定它应该在哪里。从屏幕截图上看,脚本似乎生成了很多输出,包括进度条。您可能必须使用输出(或重定向到其他文件)才能完成脚本。