我有一个奇怪的问题从STDIN在python脚本中读取。无法正确读取STDIN
这是我的用例。我有rsyslog配置了一个输出模块,因此rsyslog可以将日志消息传递给我的Python脚本。
我的Python脚本真是小巫见大巫:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
fd = open('/tmp/testrsyslogomoutput.txt', 'a')
fd.write("Receiving log message : \n%s\n" % ('-'.join(sys.stdin.readlines())))
fd.close()
如果我跑echo "foo" | mypythonscript.py
我可以在目标文件/tmp/testrsyslogomoutput.txt
获得“富”。但是,当我在rsyslog中运行它时,消息似乎只在停止/重新启动rsyslog时发送(我相信某些缓冲区在某个时间点被刷新)。
我首先以为这是Rsyslog的问题。所以我用一个shell替换了我的python程序,而没有改变任何东西到rsyslog配置。 shell脚本的作品完美与rsyslog现在,正如你可以在下面的代码中看到,该脚本真是小巫见大巫:
#! /bin/sh
cat /dev/stdin >> /tmp/testrsyslogomoutput.txt
由于我的shell脚本的作品,但我的Python一个没有,我相信我在什么地方犯了一个错误我的Python代码,但我找不到在哪里。如果你能指出我的错误,那将很棒。
感谢提前:)
我试过你建议它没有任何区别。它仍然适用于这个简单的shell脚本。我也尝试从我的python脚本(没有readlines())中读取/ dev/stdin,它仍然挂起。 – 2012-02-25 04:32:54
哦,好的。下一个想法:通过使用-u标志调用python,将python的I/O缓冲区带出等式。 – alexis 2012-02-25 12:08:39
感谢您的支持亚历克西斯,我也试过用python -u,它没有改变任何东西。 – 2012-02-25 14:39:44