Python下子进程日志记录

3
所以我创建了一个记录器,可以记录到文件和控制台。然而,我需要调用子进程来运行其他Python文件,但问题是,即使我已经在Python文件中实现了日志记录,控制台和文件也只有在子进程完成后才会填充日志消息。我希望在子进程期间能够将日志记录到控制台,即我能够在运行其他文件时看到输出。
有什么想法吗?或者是否有另一种在Python内运行Python文件的方法?
我的子进程函数:
def _run_cmd(args_list):
    """
    run linux commands
    """
    # import subprocess
    print('Running system command: {0}'.format(' '.join(args_list)))
    proc = subprocess.Popen(args_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    s_output, s_err = proc.communicate()
    s_return = proc.returncode
    return s_return, s_output, s_err

我调用子进程的地方:

try:
    s_return, s_output, s_err = _run_cmd(["python", abs_path])
    if s_err:
        finish_fail(config, logger)
except Exception as e:
    logger.error("error", str(e))

abs_path 是我想要运行的文件所在的位置。

1个回答

4
  1. 类似这个问题的答案可以参考这里。您应该使用log_subprocess_output来记录子进程的输出。由于它是一个子进程,在运行时它不会自动将日志打印到控制台或文件中。这就是为什么它首先完成进程并在进程结束时将日志存储在文件中。
  2. 第二种方法是将您想要调用的python文件导入主python文件,并保持日志记录过程不变。
  3. 另一种处理方式是使用spur从主python文件运行python文件。(不建议使用) Spur

谢谢。


感谢提供的解决方案,我选择了第二个选项,采用了 importlib - Bryce Ramgovind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接