我的问题是我想在linux控制台中做这样的事情
telnet 192.168.255.28> process.py 即我想使用python脚本使用控制台telnet输出进行一些转换。我在python中看到了Popen这个案例,但是我无法理解如果它没有停止所有时间我怎么能从telnet获得输入.. 请任何想法。
答案 0 :(得分:3)
您考虑过telnetlib了吗?看起来几乎就是你想要的东西?
答案 1 :(得分:2)
如果您可以调整您的解决方案,telnetlib似乎是正确的方法 - +1到xitrium。
尽管如此,如果你已经将telnet的输出汇总到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
。
答案 2 :(得分:1)
正如xitrium所说,如果你使用telnetlib会更好。你可以省去整个shell重定向等等。
如果您执行telnet foo | process.py
之类的操作,则可以读取程序stdin(sys.stdin
)以获取telnet程序的输出。如果您满意,可以退出并终止管道。如果您尝试将subprocess.Popen
程序作为解释器的子进程打开,则将使用telnet
。我不确定你想要那个。
无论如何,telnetlib似乎是正确的方式。如果您只想要一个输出文本处理器,请考虑perl。它的优势在于这个方向。