所以我有一个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
。
答案 0 :(得分:0)
对我来说,最简单的方法就是jww的回答。如果需要将另一个脚本的输出附加到同一日志文件中,请在python脚本中将os.system
与tee -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()
{{1}}