我在 python 中有一个 CGI 脚本,它使用 Telnetlib 发送 telnet 命令。我从 javascript 中以 JSON 的形式获得了适当的信息(在这种情况下,'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
,因为每个工作人员对应于一个单独的 telnet 地址,两个需要发送的命令。在updateParam
中,我打开一个到设备 IP 地址的 telnet 连接,并打开一个.txt
文件来记录发送和接收的内容。我将命令写入 telnet 连接,这就是我遇到错误的地方。
我能够发送不需要 json 值的命令,但是当我尝试使用 json 值时,我得到了UnicodeDecodeError
. 我.txt
也可以毫无问题地将值写入我的文件。
为什么在我尝试将这些值写入 telnet 连接时会出现此错误?
编辑:我进入了通过 cgi 发送 JSON 的 javascript,并尝试在发送 cgi 请求之前从 json 中删除所有非 ascii 字符。这没有用。当我在发送请求之前让 javascript 警告字符串化的 json 时,我找不到任何非 ascii 字符(特别是似乎导致问题的 ÿ)。然后我实施了在这个问题中找到的解决方案,它似乎工作正常。