Wir bereiten den Wechsel zu Python 3.4 vor und fügen unicode_literals hinzu. Unser Code stützt sich weitgehend auf das Piping zu/von externen Dienstprogrammen mit Hilfe des Unterprozessmoduls. Der folgende Codeausschnitt funktioniert auf Python 2.7 Rohr UTF-8-Strings zu einem Teilprozess fein:Wie behebt man eine Codierung, die den Python-Subprozess auf Unicode_literals migriert?
kw = {}
kw[u'stdin'] = subprocess.PIPE
kw[u'stdout'] = subprocess.PIPE
kw[u'stderr'] = subprocess.PIPE
kw[u'executable'] = u'/path/to/binary/utility'
args = [u'', u'-l', u'nl']
line = u'¡Basta Ya!'
popen = subprocess.Popen(args,**kw)
popen.stdin.write('%s\n' % line.encode(u'utf-8'))
...blah blah...
Die folgenden Änderungen werfen diese Fehler:
from __future__ import unicode_literals
kw = {}
kw[u'stdin'] = subprocess.PIPE
kw[u'stdout'] = subprocess.PIPE
kw[u'stderr'] = subprocess.PIPE
kw[u'executable'] = u'/path/to/binary/utility'
args = [u'', u'-l', u'nl']
line = u'¡Basta Ya!'
popen = subprocess.Popen(args,**kw)
popen.stdin.write('%s\n' % line.encode(u'utf-8'))
Traceback (most recent call last):
File "test.py", line 138, in <module>
exitcode = main()
File "test.py", line 57, in main
popen.stdin.write('%s\n' % line.encode('utf-8'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
Irgendwelche Vorschläge UTF-8 durchlaufen das Rohr?
Dank für Dies hatte ich genau die gleiche Situation und Problem und dieser Thread war eine große Hilfe. Ich fand auch, dass 'sh.py' (verfügbar hier: https://github.com/amoffat/sh) in einigen einfachen Fällen ein einfacher, tragbarer und kompatibler Ersatz für einige" Unterprozesse "war Verrücktheit. – user5359531