Ich habe ein rudimentäres Verständnis von Python, bin aber nicht klar im Umgang mit Binärcodierungsprobleme. Ich versuche, Beispielcode von einem firefox-webextensions-Beispiel auszuführen, in dem ein Python-Skript Text sendet, der von einem Javascript-Programm gelesen wird. Ich stoße immer wieder auf Codierungsfehler.Codierung: TypeError: Write() Argument muss Str sein, nicht Bytes
Der Python-Code ist:
#! /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'])
Der Fehler trace (in Firefox Konsole angezeigt) ist:
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
Lauf Python 3.5.1 auf OS X El Capitan 10.11.6, x86 64-Bit Zentralprozessor; firefox Entwickler ed 52,0
Der Python-Skript, die ich benutze, wie oben gezeigt, von den ursprünglichen bei https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging
ich auch versucht, minimiert wird:
sys.stdout.buffer.write(encodedMessage['length'])
sys.stdout.buffer.write(encodedMessage['content'])
, die erzeugt:
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'
haben Sie es zu Zeichenfolge wie folgt aus? Sys.stdout.buffer.write (str (encodedMessage [ 'Länge'] zu konvertieren versucht)) – Shiping