2017-07-16 156 views
0

我有以下代码:类型错误使用Telnet.write()

try: 
    tn = Telnet(host, str(port)) 
except Exception as e: 
    print("Connection cannot be established", e) 
    traceback.print_exc() 
print("You are connected") 
tn.write('command?'+'\r\n') 
while True: 
    line = tn.read_until("\n") 

当我运行的机器X上的一切这段代码工作得很好,但是当我尝试在不同的运行相同的代码机器我结束了以下错误:

Traceback (most recent call last): 
File 
"C:/Users/admin/Documents/Projects/terminalManager/terminalManager.py", line 50, in <module> 
terminalManager() 
File 
"C:/Users/admin/Documents/Projects/terminalManager/terminalManager.py", line 16, in __init__ 
self.connect(terminalBganIp, terminalBganPort) 
File "C:/Users/admin/Documents/Projects/terminalManager/terminalManager.py", line 34, in connect 
tn.write('AT_IGPS?'+'\r\n') 
File "C:\Program Files (x86)\Python\Python3.6.1\lib\telnetlib.py", line 287, in write 
if IAC in buffer: 
TypeError: 'in <string>' requires string as left operand, not bytes 

我做错了什么或是第二台机器搞乱了我?

编辑:

,当我用我的第二台机器的一切空闲调试工作。它似乎不正常运行,有没有什么我可以做的解决这个问题?

+0

作为[文件](https://docs.python.org /3/library/telnetlib.html#telnetlib.Telnet.write)指出,'Telnet.write()'函数期望传递一个参数,它是一个字节字符串,而不是一个字符串 - 所以你需要转换'' AT_IGPS?'+'\ r \ n''字符串不会显示在您的代码中。两台机器都运行相同版本的Python(这可能在Python 2和Python 3之间改变)? – martineau

回答

2

我不敢相信相同的代码在另一台具有相同python版本的机器上工作。

你的问题正是异常说的是TypeError: 'in <string>' requires string as left operand, not bytes。您需要提供bytestn.write而不是string

您可以通过encode您的字符串转换为字节:

command = "command?" + "\r\n" 
tn.write(command.encode("ascii")) 

编辑:嗯,有人打我给它:d

+0

把它绑起来,问题仍然是一样的......我得到“你连接”,并没有一切冻结 –

+0

我觉得这很奇怪运行闲置调试器一步一步我得到一切工作... –

+0

这种行为每次都会发生?也许这是telnet服务器执行命令的问题。尝试'在_范围内(max_tries)'而不是'在True'时放弃你的程序。 – Chabare

0

尝试做:

tn.write(('command?'+'\r\n').encode()) 

插座通常工作在不是字符串,该错误可能与该字节,希望这可以帮助。

+0

试过也...没有按原样工作。它在前些天工作正常......今天一切都破了,我没有改变一行代码。 –