Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2011 14:20:16

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

optparse проблемы с выводом подсказки.

Здравствуйте. Решил поиграться с optparse. Написал вот такой кусок:

if __name__ == '__main__':
parser = OptionParser()
parser.add_option("-p", "--path", action="store", type="string", dest="path", default=os.path.abspath(os.curdir),\
help="Задайте директорию, в которой будет работать скрипт. По умолчанию текущая.")
parser.add_option("-s", "--show-only", action="store_true", dest="show", default=False,\
help="Используйте для простого определения и вывода кодировки файла, без изменения.")
parser.add_option("-d", "--decode" ,action="store", type="string", dest="code", default='utf8',\
help="Задайте кодировку, на которую хотите заменить исходную. По умолчанию 'utf8'")
parser.add_option("--remove", action="store_true", dest="remove", default=False,\
help="Используйте для удаления исходных файлов. Игнорируется при наличии '-s'")
parser.add_option("-e", "--extension", action="store", type="string", dest="extension", default="",\
help="Расширение фалов, с которыми будет работать скрипт. По умолчанию все файлы.")
parser.add_option("--prefix", action="store", type="string", dest="prefix", default="re_",\
help="Префикс, который нужно добавить к вновь созданному файлу. По умолчанию 're_'")
(options, args) = parser.parse_args()
В скрипте я имею доступ к переданныи опциям, с этим всё нормально. При вызове скрипта с опцией -h получаю вот что:
Traceback (most recent call last):
File "code_juggler-a0.1.py", line 70, in <module>
(options, args) = parser.parse_args()
File "/usr/lib/python2.6/optparse.py", line 1394, in parse_args
stop = self._process_args(largs, rargs, values)
File "/usr/lib/python2.6/optparse.py", line 1438, in _process_args
self._process_short_opts(rargs, values)
File "/usr/lib/python2.6/optparse.py", line 1545, in _process_short_opts
option.process(opt, value, values, self)
File "/usr/lib/python2.6/optparse.py", line 788, in process
self.action, self.dest, opt, value, values, parser)
File "/usr/lib/python2.6/optparse.py", line 810, in take_action
parser.print_help()
File "/usr/lib/python2.6/optparse.py", line 1664, in print_help
file.write(self.format_help().encode(encoding, "replace"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 128: ordinal not in range(128)
В начале файла указано: # -*- coding: utf-8 -*-
При написании хелпов на английском ситуация не меняется.



Офлайн

#2 Янв. 6, 2011 14:38:21

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

optparse проблемы с выводом подсказки.

А что стоит в LANG и sys.stdout.encoding, locale.getpreferredencoding()



Офлайн

#3 Янв. 6, 2011 14:56:44

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

optparse проблемы с выводом подсказки.

sys.stdout.encoding - ‘utf-8’

Остальное NameError: name <name> is not defined

Или вас интересует системный LANG? Тогда ru_RU.utf8.



Офлайн

#4 Янв. 6, 2011 15:50:51

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

optparse проблемы с выводом подсказки.

сдается мне, что нужно было help-строку сделать юникодом (u“…”) :)



Отредактировано (Янв. 6, 2011 15:51:15)

Офлайн

#5 Янв. 6, 2011 16:29:50

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

optparse проблемы с выводом подсказки.

pyuser
сдается мне, что нужно было help-строку сделать юникодом (u“…”) :)
Нет. Аналогичная ругань…



Офлайн

#6 Янв. 6, 2011 16:34:10

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

optparse проблемы с выводом подсказки.

Да ну? При ваших настройках должно помогать



Офлайн

#7 Янв. 6, 2011 16:54:36

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

optparse проблемы с выводом подсказки.

Андрей Светлов
Да ну? При ваших настройках должно помогать
Ну… Мамой клянусь…

Вот так написал:
parser.add_option("--remove", action="store_true", dest="remove", default=False,\
help=u"Используйте для удаления исходных файлов. Игнорируется при наличии '-s'")
parser.add_option("-e", "--extension", action="store", type="string", dest="extension", default="",\
help=u"Расширение фалов, с которыми будет работать скрипт. По умолчанию все файлы.")
Запускаю script -h. Получаю:
Traceback (most recent call last):
File "code_juggler-a0.1.py", line 80, in <module>
(options, args) = parser.parse_args()
File "/usr/lib/python2.6/optparse.py", line 1394, in parse_args
stop = self._process_args(largs, rargs, values)
File "/usr/lib/python2.6/optparse.py", line 1438, in _process_args
self._process_short_opts(rargs, values)
File "/usr/lib/python2.6/optparse.py", line 1545, in _process_short_opts
option.process(opt, value, values, self)
File "/usr/lib/python2.6/optparse.py", line 788, in process
self.action, self.dest, opt, value, values, parser)
File "/usr/lib/python2.6/optparse.py", line 810, in take_action
parser.print_help()
File "/usr/lib/python2.6/optparse.py", line 1664, in print_help
file.write(self.format_help().encode(encoding, "replace"))
File "/usr/lib/python2.6/optparse.py", line 1644, in format_help
result.append(self.format_option_help(formatter))
File "/usr/lib/python2.6/optparse.py", line 1624, in format_option_help
result.append(OptionContainer.format_option_help(self, formatter))
File "/usr/lib/python2.6/optparse.py", line 1073, in format_option_help
result.append(formatter.format_option(option))
File "/usr/lib/python2.6/optparse.py", line 315, in format_option
help_text = self.expand_default(option)
File "/usr/lib/python2.6/optparse.py", line 287, in expand_default
return option.help.replace(self.default_tag, str(default_value))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 15: ordinal not in range(128)



Офлайн

#8 Янв. 6, 2011 20:55:08

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

optparse проблемы с выводом подсказки.

если поставить u у всех строк то работает

# coding: utf8
from optparse import OptionParser
import os

if __name__ == '__main__':
parser = OptionParser()
parser.add_option(u"-p", u"--path", action=u"store", type=u"string", dest=u"path", default=os.path.abspath(os.curdir),\
help=u"Задайте директорию, в которой будет работать скрипт. По умолчанию текущая.")
parser.add_option(u"-s", u"--show-only", action=u"store_true", dest=u"show", default=False,\
help=u"Используйте для простого определения и вывода кодировки файла, без изменения.")
parser.add_option(u"-d", u"--decode" ,action=u"store", type=u"string", dest=u"code", default='utf8',\
help=u"Задайте кодировку, на которую хотите заменить исходную. По умолчанию 'utf8'")
parser.add_option(u"--remove", action=u"store_true", dest=u"remove", default=False,\
help=u"Используйте для удаления исходных файлов. Игнорируется при наличии '-s'")
parser.add_option(u"-e", u"--extension", action=u"store", type=u"string", dest=u"extension", default=u"",\
help=u"Расширение фалов, с которыми будет работать скрипт. По умолчанию все файлы.")
parser.add_option(u"--prefix", action=u"store", type=u"string", dest=u"prefix", default=u"re_",\
help=u"Префикс, который нужно добавить к вновь созданному файлу. По умолчанию 're_'")
(options, args) = parser.parse_args()



Офлайн

#9 Янв. 6, 2011 21:10:52

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

optparse проблемы с выводом подсказки.

bazooka
если поставить u у всех строк то работает
Нет.
    parser.add_option(u"-p", u"--path", action=u"store", type=u"string", dest=u"path", default=os.path.abspath(os.curdir),\
help=u"Задайте директорию, в которой будет работать скрипт. По умолчанию текущая.")
parser.add_option(u"-s", u"--show-only", action=u"store_true", dest=u"show", default=False,\
help=u"Используйте для простого определения и вывода кодировки файла, без изменения.")
parser.add_option(u"-d", u"--decode" ,action=u"store", type=u"string", dest=u"code", default=u"utf8",\
help=u"Задайте кодировку, на которую хотите заменить исходную. По умолчанию 'utf8'")
parser.add_option(u"--remove", action=u"store_true", dest=u"remove", default=False,\
help=u"Используйте для удаления исходных файлов. Игнорируется при наличии '-s'")
parser.add_option(u"-e", u"--extension", action=u"store", type=u"string", dest=u"extension", default=u"",\
help=u"Расширение файлов, с которыми будет работать скрипт. По умолчанию все файлы.")
parser.add_option(u"--prefix", action=u"store", type=u"string", dest=u"prefix", default=u"re_",\
help=u"Префикс, который нужно добавить к вновь созданному файлу. По умолчанию 're_'")
parser.add_option(u"-i", u"--ignore-subpath", action=u"store_true", dest=u"ignore", default=False, \
help=u"Используйте для игнорирования вложенных каталогов.")
parser.add_option(u"-a", u"--accuracy", type=u"int", dest=u"accuracy", default=10000, \
help=u"Задайте точность определения кодировки. По умолчанию 10000.")
Старая ошибка.

В отдельном файле тоже не работает. Хотя это и не удивительно.



Отредактировано (Янв. 6, 2011 21:13:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version