Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python脚本在调用bash脚本时被冻结_Python_Bash_Flask - Fatal编程技术网

Python脚本在调用bash脚本时被冻结

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(

我有一个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(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,也不确定它应该在哪里。从屏幕截图上看,脚本似乎生成了很多输出,包括进度条。您可能必须使用输出(或重定向到其他文件)才能完成脚本。