Python telnetlib未读取全部内容
我正在尝试用Python的telnetlib来自动下载Argos数据,但我似乎搞不清楚怎么才能下载到所有的输出。我的问题部分可能是因为我不太理解这些命令看起来是异步的特性。
这是我的代码:
tn = telnetlib.Telnet(host = HOST, timeout = 60)
with open("argos_prv_{0}-1.txt".format(now_str), 'w') as of:
tn.read_until("Username: ")
tn.write(user + "\n")
tn.read_until("Password: ")
tn.write(password + "\n")
tn.read_until("/")
# Here's the command I'm trying to get the results of:
tn.write("prv,,ds,{0:d},009919,009920\n".format(start_doy))
# At this point, it's presumably dumped it all
tn.read_until("ARGOS READY")
tn.read_until("/")
# Logging out
tn.write("lo\n")
lines = tn.read_all()
of.write(lines)
of.flush()
代码运行得很好,但当我查看输出文件时,里面从来没有全部内容,总是随机中断。当我在真实的telnet会话中输入相同的命令时,一切都正常。
我感觉这可能和在注销后尝试read_all()
有关(tn.write("lo\n")
),但当我查看telnetlib的示例文档时,它看起来几乎和这个一样。
总之,我的问题是:有没有人能看出我哪里做错了?我想获取prv,,ds
命令的结果,但用这段代码只得到了部分内容。
谢谢。
1 个回答
0
# At this point, it's presumably dumped it all
tn.read_until("ARGOS READY")
tn.read_until("/")
我猜这部分代码是在获取数据,但并没有对这些数据做任何处理。可以把它想象成一对管道——你用write
把东西送进去,用read_*
把东西拉回来。如果你已经把东西都吸进去了,那么等你之后再用read_all
的时候,管道里就不会还有东西等着你了。
编辑:
好的,你遇到了另一个问题。试试这个:
lines = tn.read_until("ARGOS READY")
lines += tn.read_until("/")
tn.write("lo\n")
# Write out lines to file.