我有一个奇怪的问题要在 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
我可以在目标文件中获得“foo” /tmp/testrsyslogomoutput.txt
。但是,当我在 rsyslog 中运行它时,似乎只有在我停止/重新启动 rsyslog 时才会发送消息(我相信某些缓冲区会在某个时候被刷新)。
我首先认为这是 Rsyslog 的问题。所以我用一个 shell 替换了我的 python 程序,没有改变任何 rsyslog 配置。shell 脚本与 rsyslog 完美配合,正如您在下面的代码中所见,该脚本非常简单:
#! /bin/sh
cat /dev/stdin >> /tmp/testrsyslogomoutput.txt
由于我的 shell 脚本有效,但我的 Python 脚本无效,我相信我在 Python 代码的某个地方犯了一个错误,但我找不到在哪里。如果你能指出我的错误,那就太好了。
提前致谢 :)