【发布时间】:2013-08-24 23:58:50
【问题描述】:
我需要构建一个脚本来获取尽可能多的主机的 telnet 输出,并将它们保存到每个主机的单独文件中。该脚本应作为守护程序运行。
目前我有一个函数,它封装了使用telnetlib 为单个主机执行此操作的逻辑,但我不知道如何继续。我计划为每个主机打开一个进程(multiprocessing.Process),但我怀疑这将是一种资源浪费,它必须以更好的方式存在:)
def TelnetLogSaver(hostname,ip,filename):
# open files and telnet sessions
f = open(filename,"a")
tn = telnetlib.Telnet(ip,23,TIMEOUT)
# login
e = tn.read_until("Login: ")
tn.write(USER+"\n")
# and password
e = tn.read_until("Password: ")
tn.write(PASSWORD+"\n")
# Connected. Start infinite loop to save messages log
while True:
e = tn.read_until(PROMPT,TIMEOUT)
if e is not "":
f.write(datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S"))
f.write(e)
f.flush()
# avoid session timeout
tn.write("\n")
e = tn.read_until(PROMPT
【问题讨论】:
-
你可以试试多线程吗?在主要受网络时间限制的应用程序中,将 GIL 作为瓶颈应该完全可以忽略不计,并且线程要轻得多。
-
一个想法:使用select()