gpt4 book ai didi

python - python 后台进程(= rsyslog 进程的子进程)...仅在关闭时写入

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:18 35 4
gpt4 key购买 nike

下面是一个简单的 python 程序,它通过 StdIn 将 rsyslog 数据记录到 py.output.txt
我的问题是它不会实时将来自 STDin 的数据记录到输出中。

如果 ishome.py 作为(rsyslog 的)后台子进程运行...没有输出 被发送到 py.output.txt只有当我停止主进程时.. py.output.txt 接收输出

后台处理时

当我终止 rsyslog 时,它会向他的子进程 ishome.py 发送一个 EOF .. 这可能会触发实际的数据写入。

当前台进程

然而,当我将 ishome.py 作为前台进程运行时,py.output.txt 会实时更新永远新的条目。我不需要关闭 ishome.py 来记录每个新事件。

bash 输出

>>ps 
root 4328 1 0 21:04 ? 00:00:00 /usr/sbin/rsyslogd -c5
root 4360 4328 1 21:04 ? 00:00:00 python/home/pi/script/ishome.py

>>pi@rasp ~/script $ cat py.output.txt

>>pi@rasp ~/script $ sudo service rsyslog stop
[ ok ] Stopping enhanced syslogd: rsyslogd.
>>pi@rasp ~/script $ cat py.output.txt

2016-01-24 21:05:32.112457 :2016-01-24T22:04:22+00:00 192.168.0.198
2016-01-24 21:05:32.113029 :2016-01-24T22:04:33+00:00 192.168.0.198

ishome.py

#!/usr/bin/env python

import sys
from datetime import datetime

filename = open("/home/pi/script/py.output.txt",'a',0)
sys.stdout = filename

for line in sys.stdin:
print (str(datetime.now())+' :'+line)

首先认为 StdIn 被缓冲并且流在关闭时被处理。但是,当我查看处理 StdIn 行的时间时,我清楚地看到 StdIn 是实时处理的。只有写出来是..没有发生?

我已经使用通过 PyMongo 写入 MongoDB 的数百个输入行测试了这个场景。当进程终止时,数据库再次更新。

不知道是什么导致了这种写入延迟,我希望每个新事件都实时写入我的输出(无论是数据库还是文件)。

最佳答案

一些 sys.strin.readline() 将如何不断返回和空字符串,我假设一个字符串只有“/n”

所以我在我的代码中添加了一个检查 .. 来解决这个问题。案例结束:-)

while True:
line = sys.stdin.readline()
if line != "":
result = db.mac.insert_one({"adres":line}) ## My action

关于python - python 后台进程(= rsyslog 进程的子进程)...仅在关闭时写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34982142/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com