Chúng tôi đang chuẩn bị chuyển sang Python 3.4 và thêm unicode_literals. Mã của chúng tôi dựa hoàn toàn vào đường ống đến/từ các tiện ích bên ngoài bằng cách sử dụng mô-đun subprocess. Đoạn mã sau hoạt động tốt trên Python 2,7 đến ống UTF 8-strings để một tiểu trình:Làm thế nào để sửa một quy trình con chuyển mã Python sang 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'))
...blah blah...
Những thay đổi sau đây ném lỗi này:
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)
Mọi góp ý để vượt qua UTF-8 thông qua ống?
cảm ơn điều này, tôi đã có chính xác tình hình & vấn đề và thread này là một trợ giúp rất lớn. Tôi cũng thấy rằng trong một số trường hợp đơn giản, 'sh.py' (có sẵn tại đây: https://github.com/amoffat/sh) là một sự thay thế dễ dàng, di động và tương thích cho một số' quy trình con' điên cuồng. – user5359531