我想将tac
命令显示的行数限制为5,并将此结果保存到新文件中。
tac /home/pi/log/log.txt | head -n 5
上面的命令在我的命令窗口中运行良好...
但是,当我尝试通过Python文件调用它然后保存在新文件中时,我收到tac: write error: Broken pipe
错误...
这就是代码的样子:
while True:
db_file = open("/home/pi/log/heartbeat.txt", 'a')
db_file.write('#################\n')
db_file.write('LAST LOGs\n')
db_file.write('#################\n')
db_file.close()
statement = 'tac /home/pi/log/log.txt | head -n 5 '
result = check_output(statement, shell=True)
db_file = open("/home/pi/log/heartbeat.txt", 'a')
db_file.write(result)
db_file.close()
sleep(1)
顺便说一下,我每秒都使用命令watch
继续检查新内容。
有关如何修复此问题的任何提示?
谢谢,
答案 0 :(得分:1)
您可以使用此调节功能将此错误解决为您的语句命令:
更改自:
statement = 'tac /home/pi/log/log.txt | head -n 5 '
更改为:
statement = 'tail -n5 /home/pi/log/log.txt | tac | head -n 5 '
此外,该声明可以缩短为:
statement = 'tail -n5 /home/pi/log/log.txt | tac'
发生错误的原因是(并且只会在某些环境中显示,例如您的直接python环境),在缓冲区读取周期期间触发停止读取的限制。它不会发生在较小的文件上,因为在触发器关闭tac
命令之前会读取内容。
错误并非致命......只是一种麻烦。它可以忽略,也可以使用提供的解决方法。
答案 1 :(得分:-1)
我认为tac在大输入上会有效,所以也许最好将命令更改为:
tail -n5 /home/pi/log/log.txt | tac
(在python环境中处理大型日志文件时tac会崩溃并导致管道错误吗?)