2012-07-30 53 views
0

我要像這樣運行蟒蛇2.3如何運行一個管道命令

grep -w 1 pattern <(tail -f mylogfile.log) 
從一個Python腳本我想監視特定字符串的日誌文件,並儘快與python腳本繼續

基本命令正如我發現的那樣。
我正在使用os.system(),但這是懸掛。 bash中的相同命令行之有效。

我有一個非常舊的版本的Python(V2.3),所以沒有子流程模塊。

做,我們有辦法達致這

+0

你可以嘗試'commands'模塊,b至少有一個人應該給予簡單的答案 - 升級到較新版本的python;) – mgilson 2012-07-30 12:29:06

+0

大概他有和升級python一樣的問題,因爲他從[SVN]提取['subprocess.py'](http:// svn。 python.org/view/%2acheckout%2a/python/tags/r255/Lib/subprocess.py) – 2012-07-30 12:34:31

回答

1

在Python 2.3,你需要使用subprocess from SVN

import subprocess 
import shlex 
subprocess.call(shlex.split("/bin/bash -c 'grep -w 1 pattern <(tail -f mylogfile.log)'")) 

要明確,你需要從上面SVN鏈接的安裝。

您需要/bin/bash -c調用這個由於你使用


編輯shell重定向

如果你想與os.system()來解決這個問題,只是在/bin/bash -c包裹的命令,因爲你正在使用shell重定向...

os.system("/bin/bash -c 'grep -w 1 pattern <(tail -f mylogfile.log)'") 
+0

再次,我沒有子進程,不能在我當前的環境中下載任何新模塊:-( – 2012-07-30 12:00:45

+0

不是能夠下載是新的信息,這將是很好的知道......雖然我不知道要在'vi'中將'subprocess.py'複製到一個文件是多麼困難,因爲你可能通過ssh' – 2012-07-30 12:01:46

+0

訪問它這次似乎很有用。感謝名單。 – 2012-07-31 09:59:23

-1

如果我理解正確的話,你想輸出發送到Python這樣的 -

tail -f mylogfile.log | grep -w 1 pattern | python yourscript.py 

即閱讀所有的更新日誌文件,將匹配行發送到您的腳本。

要從標準輸入讀取,可以使用文件類對象:sys.stdin。

所以你的腳本會是什麼樣子

import sys 

for line in sys.stdin.readlines(): 
    #process each line here.