我在python中有一个CGI脚本,它使用Telnetlib发送telnet命令。我得到了适当的信息(在这种情况下,javascript形式的javascript中的'nameID',然后发送关于该JSON信息的相应命令。当我尝试编写并发送命令到telnet时, ,我收到UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
消息。
我的代码如下:
import cgi,sys,json,multiprocessing,telnetlib
def updateParam(subjson):
tn=telnetlib.Telnet()
tn.open(subjson["netAddress"],24,1)
logFile=open("log.txt","a")
tn.write("saveparam nameID "+subjson["nameID"]+"\n")
logFile.write(tn.read_until("#"))
tn.close()
logfile.close()
if __name__=="__main__":
data=json.load(sys.stdin)
numProc=4
pool=multiprocessing.Pool(processes=numProc)
for dev in data:
result=pool.apply_async(updateParam,args=(data[dev],))
result.get()
pool.close()
pool.join()
在上面的例子中,我将传递给脚本的JSON(它本身包含JSON作为其元素)加载到data
变量中。然后,我创建了一个工作池,以便在updateParam
内的每个JSON上执行data
函数,因为每个JSON对应于需要发送命令的单个telnet地址。在updateParam
内,我打开与设备IP地址的telnet连接,并打开.txt
文件以记录发送和接收的内容。我将命令写入telnet连接,这就是我遇到错误的地方。
我能够发送不需要json值的命令,但是当我尝试使用json值时,我得到了UnicodeDecodeError
。我也可以毫无问题地将值写入我的.txt
文件。
当我尝试将这些值写入telnet连接时,为什么我会特意收到此错误?
编辑: 我进入了通过cgi发送JSON的javascript,并尝试在发送cgi请求之前从json中删除所有非ascii字符。这没用。当我在发送请求之前让javascript警告字符串化的json时,我无法找到任何非ascii字符(尤其是似乎导致问题的ÿ)。然后我实现了this question中找到的解决方案,它似乎工作正常。