Форум сайта python.su
Здравствуйте!
Не подскажете, есть ли какой-нибудь модуль для разбора многословных аргументов, которые передаются программе из командной строки?
Или такой велосипед пойдет? :)
import sys
sys_argvs = ['command', 'name']
sys_argv = {'command': '', 'name': ''}
argv = sys.argv[1:]
i = int(-1)
for param in argv:
if param[:2] == '--':
i += 1
sys_argv[sys_argvs[i]] = param[2:].decode('cp1251')
else:
sys_argv[sys_argvs[i]] += ' ' + param.decode('cp1251')
print('command={0}'.format(sys_argv['command']))
print('name={0}'.format(sys_argv['name'].encode('cp866')))
Отредактировано (Дек. 17, 2010 12:48:14)
Офлайн
С вашей задачей легко справляется getopt
import sys
import getopt
opts, args = getopt.getopt(sys.argv[1:], "hd:ao:", ["multi world", "scala_dir=","all","output="])
print opts
Отредактировано (Дек. 17, 2010 14:05:49)
Офлайн
Ваш пример выводит пустой список.
Офлайн
О чем я и говорю - вы в командной строке кавычки поставили?
Офлайн
python a.py –“multi world”
C:\PROJECTS\ECRAN\utils\aaa>python a.py –“multi world”
У меня получается так. Если не секрет поделитесь в чем задача. Может найдется более красивое решение. Пользователи обычно не очень умеют пользоваться командной строкой и делают это сильно по разному - с cmd кидая файлы в эксплорере на ваше приложение, делая программные вызовы system, пишут командные файлы, и т.п. Этот процесс трудно контролировать.
Отредактировано (Дек. 17, 2010 14:33:54)
Офлайн
Первый раз я запустил ваш пример как он был, он выдал пустой список :)
Потом посмотрел сам модуль и разобрался что и как.
Задача самая простая: получить начальные данные в программу :)
Один или два аргумента могут содержать русские символы. Программа будет работать на линукс.
С линукс не работал, но слышал, что там все в утф-8 и тогда проблем с кодировкой не возникнет, верно ли?
В принципе, мой код тоже подойдет, чтобы не тянуть еще один модуль. (как раз и от кавычек избавлюсь :))
Спасибо за ответ!
Отредактировано (Дек. 17, 2010 14:54:56)
Офлайн
1 Не советую полагаться на то, что кто-то сказал что там все будет в UTF8 тем более если вы не видели систему. Может получиться даже хуже чем с windows.
2 Еще один модуль никого не напряжет. В нормальных программах они импортируются десятками.
3 Избавление от кавычек введет в заблуждение всех пользователей unix и не только их. Такая форма будет восприниматься ими как ключ и параметр программы.
4 обычный путь получения данных stdin но если он у вас занят или им пользоваться не удобно, то для передачи аргументов которые должен редактировать пользователь наверное лучше использовать что-то такое
import ConfigParser
config = ConfigParser.ConfigParser()
config.read(['xxx.xxx'])
Отредактировано (Дек. 17, 2010 15:11:39)
Офлайн
Убедили :)
Спасибо!
Офлайн