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

所以我有一个python脚本试图自动执行整个构建过程。这样,它不仅在调用python文件,而且还在调用shell脚本,maven等。所以我想要的是一种方法/过程/库,用于将输出输出到stdout和stderr到日志文件,同时即使将其打印到控制台,打印到控制台的东西不是python脚本。

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

为了进行概念验证,下面是一个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-crontab模块 - python

我正在尝试在Linux OS(CentOS 7)上使用Python-crontab模块我的配置文件如下:{ "ossConfigurationData": { "work1": [ { "cronInterval": "0 0 0 1 1 ?", "attribute&…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…

Python Pandas导出数据 - python

我正在使用python pandas处理一些数据。我已使用以下代码将数据导出到excel文件。writer = pd.ExcelWriter('Data.xlsx'); wrong_data.to_excel(writer,"Names which are wrong", index = False); writer.…

python-docx应该在空单元格已满时返回空单元格 - python

我试图遍历文档中的所有表并从中提取文本。作为中间步骤,我只是尝试将文本打印到控制台。我在类似的帖子中已经看过scanny提供的其他代码,但是由于某种原因,它并没有提供我正在解析的文档的预期输出可以在https://www.ontario.ca/laws/regulation/140300中找到该文档from docx import Document from…