我对python有基本的把握,但在处理二进制编码问题时并不清楚。我试图从firefox-webextensions示例中运行示例代码,其中python脚本发送由JavaScript程序读取的文本。我一直在遇到编码错误。编码:TypeError:写入()参数必须是str,而不是字节
的Python代码是:
#! /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
import sys, json, struct
text = "pong"
encodedContent = json.dumps(text)
encodedLength = struct.pack('@I', len(encodedContent))
encodedMessage = {'length': encodedLength, 'content': encodedContent}
sys.stdout.write(encodedMessage['length'])
sys.stdout.write(encodedMessage['content'])
的错误跟踪(显示在Firefox控制台)是:
stderr output from native app chatX: Traceback (most recent call last):
stderr output from native app chatX: File "/Users/inchem/Documents/firefox addons/py/chatX.py", line 10, in <module>
stderr output from native app chatX: sys.stdout.write(encodedMessage['length'])
stderr output from native app chatX: TypeError: write() argument must be str, not bytes
在OS X埃尔卡皮坦10.11.6运行蟒3.5.1,86的64位中央处理器;火狐显影剂编52.0
我使用Python脚本,如上所示,是从原始最小化在 https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging
我也尝试:
sys.stdout.buffer.write(encodedMessage['length'])
sys.stdout.buffer.write(encodedMessage['content'])
其产生:
stderr output from native app chatX: sys.stdout.buffer.write(encodedMessage['content'])
stderr output from native app chatX: TypeError: a bytes-like object is required, not 'str'
你试图将其转换为字符串,像下面?sys.stdout.buffer.write(STR(encodedMessage [“长度”]) ) – Shiping