【问题标题】:Python Telnet if read = xxxxPython Telnet 如果读取 = xxxx
【发布时间】:2015-08-27 00:05:47
【问题描述】:

我在使用 Telnet 的 Python 中遇到了一个小问题。我试图通过确定 telnet 连接是否已经登录来启动脚本。我的代码如下所示:

if TLNT.read_until("login: ",2): #if it reads the login prompt:
    login(USER,PASS) #runs the function used to login to the system
main() #otherwise will determine system is already logged in and start the main script

这里的问题我不确定这里的格式,因为即使我故意注销了 telnet 系统,脚本也会跳过登录功能,所以我知道它看到了登录提示。如果 telnet 提示停留在“login:”,read_until 会返回什么?

【问题讨论】:

  • 问题是什么?
  • 我刚刚更新了问题以提供更多信息

标签: python telnet


【解决方案1】:

答案在documentation!

Telnet.read_until(expected[, timeout])

读取直到遇到预期的给定字符串或超时秒数过去。

当没有找到匹配项时,返回任何可用的代替,可能是空字符串。如果连接已关闭且没有可用的熟数据,则引发 EOFError。

它不返回True 或False,因此您可能不想将返回值用作条件表达式。

【讨论】:

  • read_until 的返回是否包含参数字符串?也许他可以测试if 'login:' in TLNT.read_until('login:', 2): login(USER, PASS)。我没有要测试的 telnet 服务器,也没有时间关注源代码中的函数调用(它最终返回 self.cookedq,但我不知道它是如何填充的)
  • 是的,它包括匹配的文本。 >>> tn = telnetlib.Telnet('...') >>> tn.read_until("login:", 2) '\r\n\r\nSunOS 5.8\r\n\r\r\n\ rlogin:' 允许读取任何输出,直到遇到提示,然后处理输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2014-11-25
  • 2013-04-21
  • 2015-03-26
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多