我的系统由一个从supervisord启动的python应用程序组成。我们称之为A
。 A
启动子进程B
来完成其部分任务。 A
和B
均以Python编码,并使用标准logging
模块将消息输出到控制台。
stdout
的{{1}}和stderr
将记录到supervisord配置中指定的文件中。这就像一个魅力。现在,我想将A
和stdout
从stderr
隧道传输到与B
相同的文件中。如何实现这一目标?
答案 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"))