общаться с процессом в utf-8 на cp1252 consoless - PullRequest
0 голосов
/ 26 ноября 2009

Мне нужно управлять программой, посылая команды в кодировке utf-8 на ее стандартный ввод. Для этого я запускаю программу, используя subprocess.Popen():

proc = Popen("myexecutable.exe", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
proc.stdin.write(u'ééé'.encode('utf_8'))

Если я запускаю это с консоли cygwin utf-8, это работает. Если я запускаю его из консоли Windows (encoding = 'cp1252'), это не сработает. Есть ли способ заставить это работать без необходимости устанавливать консоль cygwin utf-8 на каждый компьютер, с которого я хочу запустить? (NB: мне не нужно ничего выводить на консоль)

Ответы [ 2 ]

0 голосов
/ 26 ноября 2009

Зачем вам форсировать трубы utf-8? Не могли бы вы сделать что-то вроде

import sys
current_encoding = sys.stdout.encoding
...
proc.stdin.write(u'ééé'.encode(current_encoding))

РЕДАКТИРОВАТЬ: Я написал этот ответ, прежде чем редактировать свой вопрос. Я думаю, это не то, что вы ищете, не так ли?

0 голосов
/ 26 ноября 2009

Интересно, уместно ли это предостережение из документации для подпроцесса :

Единственная причина, по которой вам нужно указать shell = True в Windows, - это то, где команда, которую вы хотите выполнить, фактически встроена в оболочку, например, dir, copy. Вам не нужно shell = True для запуска командного файла или запуска консольного исполняемого файла.

...