Ошибка кодирования перенаправления Bash - PullRequest
2 голосов
/ 13 октября 2011

Я перенаправляю stdio сервера, написанного на Python, в файл:

python server.py &> file

Входные данные передаются через client.py, который использует библиотеку XMLRPC. Если я передаю вход UTF-8, я получаю UnicodeEncodeError, прежде чем могу что-либо сделать.

Любопытство здесь таково: если я не перенаправлю стандартный вывод server.py, я не получу сообщение об ошибке.

Локаль установлена ​​в en_US.utf8, bash корректно отображает юникод, клиент кодирует текст. Я понятия не имею, что происходит.

1 Ответ

0 голосов
/ 15 октября 2011

Код Python не имеет значения, и я не буду изменять модуль SimpleXMLRPCServer. Это связано с Bash:

Файл, созданный перенаправлением, является us-ascii и становится utf-8 только после вставки символа Юникода, который не будет работать в этом случае, так как он сначала обрабатывается модулем XMLRPC и, следовательно, возникает ошибка UnicodeDecodeError.

Сначала я попытался создать файл для перенаправления, но даже при использовании iconv -f us-ascii -t utf-8 файл остается us-ascii, если внутри файла нет последовательности юникода.

Идея состояла в том, чтобы создать базовый "тихий режим" без изменения кода Python, который не работал, поэтому я создал OptionParser, который отображает стандартный вывод на codecs.open ("silent.log", "w", encoding = "UTF-8"). Это хорошо работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...