【问题标题】:Python polling file descriptor not returning the last linePython轮询文件描述符不返回最后一行
【发布时间】:2021-07-30 17:11:19
【问题描述】:

我希望能够读取和跟踪来自 journalctl 命令的日志,以进行日志监控。有一种奇怪的行为,它没有显示日志的最后一行。 我不明白发生了什么,并且非常感谢您对如何解决此问题的一些见解。

这是我当前的代码:

import sys
import subprocess
import select
 
args = ['journalctl', '-u', 'foo.service', '--follow']
f = subprocess.Popen(args, stdout=subprocess.PIPE)
p = select.poll()
p.register(f.stdout)

while True:
    if p.poll(1):
        line = f.stdout.readline()
        if line:
            print(line.strip())

请注意,如果我再次执行f.stdout.readline(),它会吐出最后一行。

感谢您的帮助!

【问题讨论】:

    标签: python linux operating-system subprocess file-descriptor


    【解决方案1】:

    这与轮询文件有关,但我发现不使用它也不会导致任何问题。

    这似乎也可以完成工作。

    import sys
    import subprocess
     
    args = ['journalctl', '-u', 'foo.service', '--follow']
    f = subprocess.Popen(args, stdout=subprocess.PIPE)
    
    while True:
        line = f.stdout.readline()
        if line:
            print(line.strip().decode('utf-8'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      相关资源
      最近更新 更多