套接字和字符串:Python 3与Python 2

时间:2017-12-10 02:14:31

标签: python python-3.x

我正在尝试执行TPLINK smartplug python脚本:https://github.com/softScheck/tplink-smartplug/blob/master/tplink-smartplug.py

主要问题与“ sock_tcp.send(加密(cmd))”有关。变量cmd是我在终端中作为参数传递的字符串(参见下面的示例)。使用Python2执行此代码我从smartplug

获得了成功的响应
bash:~/tplink-smartplug-master$ python tplink-smartplug.py -t 192.168.xx.xx -j '{"emeter":{"get_realtime":{}}}'

输出 - 打印

Sent:     {"emeter":{"get_realtime":{}}} 

('Received: ', '{"emeter":{"get_realtime":{"current":0.039509,"voltage":236.064036,"power":4.880813,"total":0.004000,"err_code":0}}}')

如果我用Python3执行代码,我收到错误“ TypeError:需要类似字节的对象,而不是'str'”。这与使用字符串的unicode而Python2使用字节的Python3有关。

但是,如果我更改代码以满足Python3的要求:“ sock_tcp.send(encrypt(cmd).encode())”强制从Unicode转换为字节。执行代码时的响应是:

bash:~/tplink-smartplug-master$ python3 tplink-smartplug.py -t 192.168.xx.xx -j '{"emeter":{"get_realtime":{}}}' 

输出 - 打印

Sent:     {"emeter":{"get_realtime":{}}} 

Received:

我应该做些什么样的对话才能让它在Python3中运行?

encrypt()函数只添加一个额外的图表,您可以在上面的链接上查看它。

谢谢你的帮助! JP

0 个答案:

没有答案