2010-05-13 75 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。它的优势在于这个方向。