一个Python后台进程(= rsyslog进程的子进程)...仅在clos上写入

2024-09-28 01:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

当背景过程

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

当前景进程

但是当我跑iHome.py作为前台进程py.output.txt文件实时更新永久新条目。我不需要关闭iHome.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

在iHome.py

^{pr2}$

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

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

任何想法是什么造成了这种延迟写入,我想让每一个新的事件,实时写入我的输出(无论是数据库或文件)。在


Tags: 文件数据pytxtoutput进程stdin记录
1条回答
网友
1楼 · 发布于 2024-09-28 01:25:01

一些怎么样系统strin.readline()会不断返回空字符串,我推测字符串中只有“/n”

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

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

相关问题 更多 >

    热门问题