如何运行 Python 子进程命令并在输出中添加时间戳前缀?

问题描述 投票:0回答:1

我有一个 Python 脚本,可以在 Unix 机器上运行一些子进程命令。这些命令相对任意。一个例子是

docker build .

最终看起来像

subprocess.Popen(['docker', 'build', '.'])

我想在任意命令的每一行输出前面添加一个时间戳。从一些搜索中我能找到的最好答案是通过管道传递到这个:

| while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done

但是这似乎不适用于子流程。有更好的办法吗?

python unix subprocess popen
1个回答
0
投票

您可以使用

pexpect
为每行输出添加时间戳(或执行任何日志记录可以执行的操作):

#! /usr/bin/env python
import logging
import pexpect


logging.basicConfig(filename='ts.log', encoding='utf-8', format='%(asctime)s %(levelname)-8s %(message)s', level=logging.DEBUG)


def run(cmd):
    logging.info(cmd)
    p = pexpect.spawn(cmd, encoding="utf-8")
    while l := p.readline():
        logging.info(l.strip())

run("ls -l")
© www.soinside.com 2019 - 2024. All rights reserved.