我有一個奇怪的問題從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