从supervisord子进程的子节点进行日志记录

时间:2016-01-07 09:46:58

标签: python subprocess supervisord

我的系统由一个从supervisord启动的python应用程序组成。我们称之为AA启动子进程B来完成其部分任务。 AB均以Python编码,并使用标准logging模块将消息输出到控制台。

stdout的{​​{1}}和stderr将记录到supervisord配置中指定的文件中。这就像一个魅力。现在,我想将Astdoutstderr隧道传输到与B相同的文件中。如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

你不需要做任何事情。默认情况下,B会继承A的标准流。

如果将A&#s; sdout重定向到某个文件,则B的标准输出会自动写入同一位置。

答案 1 :(得分:0)

Python子进程模块提供了读取子stdout和stderr的工具。您可以捕获它们并将它们发送到记录器。下面是一个执行后的版本,它在子项完成后将所有输出发送到日志。也可以逐行执行此操作,您可以在StackOverflow中逐行读取子进程stdout的示例。

  worker = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  worker.wait()
  logger.debug("Subprocess %s stdout: %s", cmdline, worker.stdout.read().decode("utf-8"))