在python shell中运行telnet时出现错误消息

时间:2014-04-22 21:59:19

标签: python byte telnet typeerror

下面是我的代码的最小示例,如果您运行,应重新创建我遇到的问题。我遇到的一件事是,如果我的覆盆子pi(我使用柜员连接的东西)关闭或互联网电缆被拔掉,则不会出现错误。

#IMPORTS
import time
import telnetlib
import sys
import getpass


#TELNET
user = input("Please Enter Your Username: ")
time.sleep(0.4)
pass_ = input("Please Enter Your Password: ")

bot = telnetlib.Telnet("192.168.1.128")
bot.read_until("login: ".encode(),  timeout=None)
bot.write(user + "\n")
bot.read_until("Password: ".encode(),  timeout=None)
bot.write(pass_ + "\n")
bot.write("cd PiBits/ServoBlaster")

我收到以下错误消息:

Traceback (most recent call last):
  File "/Users/kiancross/Desktop/PROJECTS/RASPBERRY_PI/ROBOT/CONTROLLER_GUI/RPi_BOT_CONTROLLER.py", line 17, in <module>
    bot.write(user + "\n")
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/telnetlib.py", line 289, in write
    if IAC in buffer:
TypeError: 'in <string>' requires string as left operand, not bytes

我正在运行以下代码,您可以在this帖子中看到,但正如您从答案中看到的,我将其更改为上面的代码,从而导致上述错误消息。

我应该说代码没有接近完成,很多东西只是为了测试,直到我让telnet工作!

我已尝试修复this帖子中提到的旧版python。

我使用print(type(user))来查看变量是什么类型,它们是字符串。我已尝试bot.write((user + "\n").encode(latin-1)),如此修复程序中所示,但仍会显示错误消息。我也试过unicode编码。我理解该行的一部分编码错误,但我不知道它是变量还是"\n"。我已经尝试过bot.write(user + b"\n"),但这可以解决错误。

如果有人有任何其他方法可以阻止此错误,我将非常感谢他们。

由于

P.S Im在python 3.4.0上运行

修改

我试过这个:

bot = telnetlib.Telnet("192.168.1.128")
bot.write(user + "\n".encode('ascii'))
bot.read_until(b"Password: ")
bot.write((pass_ + "\n").encode('ascii'))

但我仍然得到同样的错误。

当我这样做时:

bot = telnetlib.Telnet("192.168.1.128")
bot.read_until(b"login: ")
bot.write(user + b"\n")
bot.read_until(b"Password: ")
bot.write(pass_ + b"\n")

我得到了一个不同的错误:

Traceback (most recent call last):
  File "/Users/kiancross/Desktop/PROJECTS/RASPBERRY_PI/ROBOT/CONTROLLER_GUI/RPi_BOT_CONTROLLER.py", line 23, in <module>
    bot.write(user + b"\n")
TypeError: Can't convert 'bytes' object to str implicitly

所有错误似乎都表明它需要是一个字符串,但我的变量已经是字符串了。

由于

1 个答案:

答案 0 :(得分:9)

telnet接口可能希望以字节而不是Unicode工作。我已经在Python3上测试了这段代码,它避免了错误:

import telnetlib
bot = telnetlib.Telnet("127.0.0.1", 22)
user = "dobbs"
bot.write((user + "\n").encode('ascii'))
print(bot.read_all())