2010-05-13 104 views
1

我的問題是我想要做這樣的事情在Linux控制檯輸出捕捉到Python腳本

的telnet 192.168.255.28> process.py 即我想做些改造與控制檯的telnet輸出使用python腳本。我看到Popen在這種情況下的python,但我不明白我怎麼能從telnet獲得輸入,如果它不停止所有的時間.. 請有任何想法。

回答

3

你考慮過telnetlib嗎?這看起來好像你正在尋找什麼?

+0

我正在使用linux telnet命令,並希望得到並將其轉換出來放在python腳本。 – sandra 2010-05-13 07:49:10

+0

+1。正確回答錯誤的問題。 :) – 2010-05-13 08:07:49

2

如果你能適應你的解決方案,telnetlib似乎是正確的做法 - 對xitrium +1。

這就是說,不過,如果你在遠程登錄的輸出通過管道進入你的Python腳本死心塌地,這將是未來在標準這意味着你可以做這樣的事情:

try: 
    while True: 
     line = raw_input() 
     do_stuff(line) 
except EOFError: 
    pass # the telnet process finished; there's no more input 

它將從telnet獲取輸出,一次一行。如果你想更好地控制,你可以使用sys.stdin.read()獲得輸入。

重要提示:在你的問題中,你說(例如)telnet 192.168.255.28 > process.py。這是錯誤的;不是將輸出從telnet輸入到腳本中,而是將輸出保存到文件中,覆蓋您的腳本。你想要的是一個管道:telnet 192.168.255.28 | process.py

1

正如xitrium提到的,如果您使用telnetlib會更好。你可以省去整個一塌糊塗的外殼重定向等。

如果你做了類似telnet foo | process.py的事情,你可以閱讀你的程序stdin(sys.stdin)來獲取telnet程序的輸出。當你快樂時,你可以退出並終止管道。如果您試圖將telnet程序作爲解釋程序的子進程打開,將會使用subprocess.Popen。我不確定你想要那個。

在任何情況下,telnetlib似乎是正確的方式。如果你只是想要一個輸出文本處理器,考慮perl。它的優勢在於這個方向。