【发布时间】:2022-08-03 11:02:50
【问题描述】:
我有一个接受 NiFi 操作的 Docker 服务日志,我只想捕获包含“成功发送”的日志条目和\"无法处理会话\"(仅此而已)。它们应该被捕获在当前工作目录中名为 \"nifi_logs\" 的目录中。我需要使用 Python 来完成所有这些工作。
这是我到目前为止得到的:
docker_log = \'docker service logs nifi | grep -e \"Successfully sent\" -e \"Failed to process session\" >> $PWD/nifi_logs/nifi1.log\'
subprocess.Popen(docker_log, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
我相信subprocess.Popen() 对grep 中使用的双引号有困难,因为nifi1.log 完全是空的。如果第一个命令如下所示:
docker_log = \'docker service logs nifi | grep session >> $PWD/nifi_logs/nifi1.log\'
Python 代码工作得很好,并在nifi1.log 中使用 \"session\" 捕获所有日志条目。正如我上面解释的那样,我需要 grep 来获取 2 种日志条目,并且都包含多个单词,这意味着我需要使用引号。
如果我只是在没有 Python 的终端上运行这个命令:
docker service logs nifi | grep -e \"Successfully sent\" -e \"Failed to process session\" >> $PWD/nifi_logs/nifi1.log
日志生成的条目很好,所以我知道 Docker 服务命令编写正确。
我尝试过切换单引号和双引号,我尝试在单引号中使用\\\" 而不是\" ...nifi1.log 仍然为空。
我也尝试使用os.system() 而不是subprocess.Popen(),但我遇到了同样的问题(我相信os.system() 有点过时了)。
我需要做些什么来更改docker_log 等于什么,以便它可以正确地grep 2个搜索条件?所以你知道:这个问题不是问我如何生成日志条目(我知道我在寻找什么 Docker 服务,它们会正确生成),只是我需要做什么才能让 Python Subprocess Popen 接受带引号的命令。
-
你好@PillagingProgrammer,欢迎来到 StackOverflow!我在Repl.it 上进行了测试,它奏效了。您使用的是哪个 Python 版本?另外,您可以发布
docker service logs nifi的结果示例吗?
标签: python docker subprocess popen