gpt4 book ai didi

Python 捕获 stdout/stderr 并在查看输出时记录到文件

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:48 28 4
gpt4 key购买 nike

所以我有一个 python 脚本试图自动化整个构建过程。因此,它不仅调用 python 文件,还调用 shell 脚本、maven 等。所以我想要的是一个方法/过程/库来捕获 stdout 和 stderr 的输出到日志文件,同时仍然将其打印到控制台,即使打印到控制台的东西不是 python 脚本。

我们在 Linux 机器上工作,因此在手动执行此操作时,我们会执行一个脚本,然后执行所有命令,然后执行退出。但是,当尝试将其包装在 python 脚本中时,脚本似乎接受了 shell 的命令,并且不允许我运行其余命令,直到我先退出

为了概念证明,这里有一个 bash 脚本,它每半秒打印一个数字,最多 10。

print_nums.bash

#!/bin/bash

for i in {1..10}
do
echo "$i"
sleep 0.5
done

这就是我想做的事情。

test_script.py

import os

def main():
cmd1 = "script /some/arbitrary/path/logfile.txt"
cmd2 = "/path/to/print_nums.bash"
cmd3 = "exit"

os.system(cmd1)

os.system(cmd2)

os.system(cmd3)

if __name__ == '__main__':
main()

我还研究了日志记录模块,但似乎只能轻松地将 python 打印捕获到日志中。我可能是错的,如果有一种直观的方法,我肯定愿意改变方法。但本质上,我希望能够在 python 中有效地从这里说我想记录控制台输出,在这里我想以编程方式结束记录。

您可以想象构建命令和初始测试可能需要很长的时间,例如 15 - 20 分钟,如果您刚刚执行了

some_command.bash > logfile.txt

最佳答案

对我来说最简单的方法是 jww 的答案。如果您需要将另一个脚本的输出附加到同一日志文件,请在 python 脚本中将 teeos.systemtee -a 结合使用。

test_script.py

import os


def main():
cmd1 = "path/to/aribitrary_script | tee /path/to/logfile"
cmd2 = "path/to/another_script | tee -a /path/to/logfile"

os.system(cmd1)
os.system(cmd2)


if __name__ == '__main__':
main()

关于Python 捕获 stdout/stderr 并在查看输出时记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53089603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com