所以我创建了一个记录器,它记录到文件和控制台。但是,我需要调用子进程来运行其他 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
是我要运行的文件的位置。
最佳答案
- 有一个问题类似于这行here .您应该使用 log_subprocess_output 来记录子进程的输出。因为它是一个子进程,所以它不会在您运行时自动将日志打印到您的控制台或文件。这就是它首先完成流程并在流程结束时将日志存储在文件中的原因。
- 第二种方法是将要调用的 python 文件导入到主 python 文件中,并保持日志记录过程不变。
- 另一种处理方法是使用 spur 从主 python 文件运行 python 文件。 (不太推荐的方式)Spur
谢谢。
关于python - 在子进程 Python 期间记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869517/