我的問題是我想要做這樣的事情在Linux控制檯輸出捕捉到Python腳本
的telnet 192.168.255.28> process.py 即我想做些改造與控制檯的telnet輸出使用python腳本。我看到Popen在這種情況下的python,但我不明白我怎麼能從telnet獲得輸入,如果它不停止所有的時間.. 請有任何想法。
我的問題是我想要做這樣的事情在Linux控制檯輸出捕捉到Python腳本
的telnet 192.168.255.28> process.py 即我想做些改造與控制檯的telnet輸出使用python腳本。我看到Popen在這種情況下的python,但我不明白我怎麼能從telnet獲得輸入,如果它不停止所有的時間.. 請有任何想法。
你考慮過telnetlib嗎?這看起來好像你正在尋找什麼?
如果你能適應你的解決方案,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
。
正如xitrium提到的,如果您使用telnetlib會更好。你可以省去整個一塌糊塗的外殼重定向等。
如果你做了類似telnet foo | process.py
的事情,你可以閱讀你的程序stdin(sys.stdin
)來獲取telnet程序的輸出。當你快樂時,你可以退出並終止管道。如果您試圖將telnet
程序作爲解釋程序的子進程打開,將會使用subprocess.Popen
。我不確定你想要那個。
在任何情況下,telnetlib似乎是正確的方式。如果你只是想要一個輸出文本處理器,考慮perl。它的優勢在於這個方向。
我正在使用linux telnet命令,並希望得到並將其轉換出來放在python腳本。 – sandra 2010-05-13 07:49:10
+1。正確回答錯誤的問題。 :) – 2010-05-13 08:07:49