在Python子进程中记录日志

在Python子进程中记录日志,python,subprocess,Python,Subprocess,所以我创建了一个日志记录器,它同时记录到文件和控制台。但是,我需要调用subprocess来运行其他python文件,但问题是控制台和文件仅在子流程完成后才填充日志消息,即使我已经在python文件中实现了日志记录。我希望它在子流程期间登录到控制台。也就是说,我能够在运行其他文件时看到输出 有什么想法吗?或者是否有其他方法在python中运行python文件 我的子流程功能: def _run_cmd(args_list): """ run linux commands

所以我创建了一个日志记录器,它同时记录到文件和控制台。但是,我需要调用subprocess来运行其他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\u path
是我要运行的文件的位置

  • 有一个问题与此类似。您应该使用log\u subprocess\u output记录子流程的输出。由于它是一个子流程,因此在运行时不会自动将日志打印到控制台或文件中。这就是为什么它首先完成流程,并在流程结束时将日志存储在文件中
  • 第二种方法是将要调用的python文件导入到主python文件中,并保持日志记录过程不变
  • 另一种处理方法是使用spur从主python文件运行python文件。(不太推荐的方式)

  • 谢谢。

    谢谢您提供的解决方案,我选择了选项2,选择了
    importlib