Как указать кодировку при запуске скрипта python в качестве модуля?python -m <filename><encoding>?
Например, я хочу запустить my_script.py
как python -m my_script -utf8
. Но такого выбора нет. Вместо этого я должен предоставить my_script.py
с кодировкой поверх файла. И он терпит неудачу с некоторыми пакетами python-2.7.
Рассмотрим следующий сценарий:
my_script.py:
# coding=utf-8
from pyglet.gl import *
$ cd ~/Documents
- создать папку без ASCII:
$ mkdir вафля
$ cd вафля
- создать
my_script.py
с выше python my_script.py
код - работает хорошоpython -m my_script
- терпит неудачу
Работа станции: Ubuntu 14.04.3 x64 + Python 2.7.6 x64 (встроенный)
Не предлагайте мне включить Python 3.4, потому что я уже сделал это и просто хочу поддерживать версии 2.7 и 3.4 Python.
Добавлено traceback.
File "my_script.py", line 22, in <module>
from pyglet.gl import *
File "/usr/local/lib/python2.7/dist-packages/pyglet/gl/__init__.py", line 236, in <module>
import pyglet.window
File "/usr/local/lib/python2.7/dist-packages/pyglet/window/__init__.py", line 1817, in <module>
gl._create_shadow_window()
File "/usr/local/lib/python2.7/dist-packages/pyglet/gl/__init__.py", line 205, in _create_shadow_window
_shadow_window = Window(width=1, height=1, visible=False)
File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 163, in __init__
super(XlibWindow, self).__init__(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pyglet/window/__init__.py", line 559, in __init__
self._create()
File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 353, in _create
self.set_caption(self._caption)
File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 511, in set_caption
self._set_text_property('WM_NAME', caption, allow_utf8=False)
File "/usr/local/lib/python2.7/dist-packages/pyglet/window/xlib/__init__.py", line 785, in _set_text_property
buf = create_string_buffer(value.encode('ascii', 'ignore'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 19: ordinal not in range(128)
Я не знаете, почему вы считаете, что у вас есть какой-либо контроль над тем, как произвольные модули Python обрабатывают данные, отличные от ASCII ... –
@ IgnacioVazquez-Abrams, строковая переменная 'value', на которой происходит сбой кода, содержит путь, отличный от unicode, к' my_script.py' , Если в параметре '-m' был атрибут, я бы передал его для переноса пути' my_script.py' в юникоде - если бы это был способ добавить символ 'u''' до значения пути ... – dizcza