Python:如何修复这个损坏的管道错误?

标签 python linux pipe ubuntu-14.04

我想将 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/

相关文章:

linux - 按出现频率对文本文件进行排序

php - 不保存到json文件(php+redis)?

c - 如何读取二进制文件并将其保存在管道中

python - 如何从文件中将公共(public) RSA key 加载到 Python-RSA 中?

Python嵌套字典理解与if else

用于性能优化的 Python 3 类型提示

python - Python 中的 Json 文件 - 输出摘要

linux - Sed 删除每个以 .jsx 扩展名结尾的文件的第一行

Java管道,为什么我在从管道读取时被无限期地阻塞

c - 努力通过信号在进程之间进行通信