我正在尝试使用 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
命令的结果,但我只是使用这个特定的代码来获取其中的一部分。
谢谢。