Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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
在docker中从python运行bash脚本时出现了奇怪的问题_Python_Bash_Docker - Fatal编程技术网

在docker中从python运行bash脚本时出现了奇怪的问题

在docker中从python运行bash脚本时出现了奇怪的问题,python,bash,docker,Python,Bash,Docker,我有python脚本,它通过子流程库运行bash脚本。我需要将stdout和stderr收集到文件中,因此我有如下包装器: def execute_chell_脚本(阶段名称、脚本): 子进程。检查输出(“{}&>logs/{}”。格式(脚本,阶段名称),shell=True) 当我在mac上启动python脚本时,它工作正常。但是如果我在docker容器中启动它(来自ubuntu:18.04),我看不到任何日志文件。如果我使用bash-c'command&>log\u file'而不是在子流程

我有python脚本,它通过子流程库运行bash脚本。我需要将stdout和stderr收集到文件中,因此我有如下包装器:

def execute_chell_脚本(阶段名称、脚本):
子进程。检查输出(“{}&>logs/{}”。格式(脚本,阶段名称),shell=True)

当我在mac上启动python脚本时,它工作正常。但是如果我在docker容器中启动它(
来自ubuntu:18.04
),我看不到任何日志文件。如果我使用
bash-c'command&>log\u file'
而不是在
子流程中使用
command&>log\u file
,我可以修复它。请检查输出(…)
。但它看起来太神奇了

我考虑了user的默认shell,它启动python脚本(其根),但是
cat/etc/passwd
显示
根/bin/bash


如果有人能告诉我发生了什么,那就太好了。也许我可以在docker文件中添加一些行,以便在docker容器内外使用相同的python脚本

正如OP在评论中报道的那样,这解决了他们的问题,我将其作为一个答案发布,以便他们能够接受

使用
检查_输出
时,你不会得到任何输出,这很奇怪;在这里要求
shell=True
是错误的。你想要

以open(os.path.join('logs',stage_name')作为输出的
:
subprocess.run([script],stdout=output,stderr=output)

见TanvGentaly,当您没有得到任何输出时,使用
检查输出
,期望任何输出都是奇怪的;在这里要求
shell=True
是错误的。您希望
以open(os.path.join('logs',stage_name))作为输出:subprocess.run([script],stdout=output,stderr=output)
可能相关,
&>文件
不是a,因此如果您的
/bin/sh
实现了没有任何供应商扩展名的标准(
sh
不是
bash
)您可能会遇到麻烦。@tripleee我将我的项目改写为python 3,并使用了您的变体。它看起来更好,而且可以按照我的要求工作。谢谢