我想将 tac
命令显示的行数限制为 5 行,并将结果保存在新文件中。
tac /home/pi/log/log.txt | head -n 5
上面的命令在我的命令窗口中运行得很好...
但是,当我尝试通过 Python 文件调用它,然后保存在新文件中时,我收到 tac: write error: Broken pipeline
错误...
代码如下所示:
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
来不断检查新内容。
有关如何解决此问题的任何提示?
谢谢
最佳答案
您可以通过对语句命令进行此修改来解决此错误:
更改自:
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
命令之前将读取内容。
这个错误并不是致命的......只是一个麻烦。可以忽略它,或者您可以使用提供的解决方法。
关于Python:如何修复这个损坏的管道错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28134935/