繁体   English   中英

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

[英]Error message when running telnet in python shell

下面是我的代码的最小示例,如果您运行,应重新创建我遇到的问题。 我遇到的一件事是,如果我的覆盆子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

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

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

我曾尝试中提到的旧版本蟒修复这个职位。

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

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

谢谢

PS我在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

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

谢谢

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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM