下面是一个简单的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写下每一个新事件。在
>>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
首先认为StdIn是缓冲的,流是在闭包时处理的。然而,当我查看StdIn行被处理的时间时,我清楚地看到StdIn是实时处理的。只有写出来的是。。没有发生?在
我用上百条通过PyMongo写入MongoDB的输入行测试了这个场景。当进程终止时,数据库再次更新。在
任何想法是什么造成了这种延迟写入,我想让每一个新的事件,实时写入我的输出(无论是数据库或文件)。在
一些怎么样系统strin.readline()会不断返回空字符串,我推测字符串中只有“/n”
所以我在我的代码里加了一个检查。。来解决这个问题。结案:-)
相关问题 更多 >
编程相关推荐