python - 在子进程 Python 期间记录

标签 python 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_path 是我要运行的文件的位置。

最佳答案

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

谢谢。

关于python - 在子进程 Python 期间记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869517/

相关文章:

python - 在 Python 中计算信号的带宽

python - 为什么我必须将 .wait() 与 python 的子进程模块一起使用?

python - Virtuozzo 和使用 Python 子进程的自动化命令

python - 向子进程发送 'ESC' 或信号

python - 如何在python中在FTP上上传完整目录?

python - Python 中的 Karatsuba 算法

python - 如何在 Python 2 上使用 psutil.Popen 和 unicode 命令

python如何在linux shell中使用子进程管道

Python 更快地打印 sympy 矩阵

python - Jupyter 找不到 keras 的模块