【问题标题】:Logging during a Subprocess Python在子进程 Python 期间进行日志记录
【发布时间】:2026-02-14 13:50:01
【问题描述】:

所以我创建了一个记录到文件和控制台的记录器。但是,我需要调用子进程来运行其他 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 是我要运行的文件的位置。

【问题讨论】:

    标签: python subprocess


    【解决方案1】:
    1. 有一个类似here这一行的问题。您应该使用 log_subprocess_output 来记录子流程的输出。由于它是一个子进程,因此在您运行它时它不会自动将日志打印到您的控制台或文件中。这就是为什么它首先完成该过程并在该过程结束时将日志存储在文件中。
    2. 第二种方法是将要调用它们的 python 文件导入到主 python 文件中,并保持记录过程不变。
    3. 另一种处理方法是使用 spur 从主 python 文件运行 python 文件。 (不太推荐的方式)Spur

    谢谢。

    【讨论】:

    • 感谢您的解决方案,我选择了选项 2,选择了 importlib