Форум сайта python.su
0
Мне нужено сделать аналог команды dir.
Я не понимаю как добавть необязательный аргумент. Я знаю, что если имя аргумента начать с двух тире, то этот аргумент будет не обязательный, но в этом случае, нужно будет сначала писать имя аругмента, а потом присваивать ему значение. В то время как оригинальной программе можно передавать путь (и не указывать, какому атрибуту мы присваиваем это значение) и так же можно его опустить и тогда просто выведутся файлы в текущем каталоге.
Сейчас есть вот такой код:
parser = argparse.ArgumentParser() parser.add_argument('--p', '--path', default=os.getcwd(), help='путь к папке содержимое, которой надо отобразить') parser.add_argument('-a', choices=['d'], help='Отображение файлов с заданными ' 'атрибуми\nd - отображение ' 'только папок') args = parser.parse_args() print(args)
Офлайн
103
maxim83632нет
Я знаю, что если имя аргумента начать с двух тире, то этот аргумент будет не обязательный
import os #1 import argparse parser = argparse.ArgumentParser() parser.add_argument("path", nargs='?', default=os.getcwd()) args = parser.parse_args() print args.path #2 import sys print sys.argv[1] if len(sys.argv) > 1 else os.getcwd()
Офлайн
0
terabaythttps://docs.python.org/3/library/argparse.html#name-or-flags и это https://docs.python.org/3/howto/argparse.html#introducing-optional-arguments тогда как понимать?
эт просто стиль
Отредактировано maxim83632 (Дек. 5, 2015 20:13:44)
Офлайн
0
terabayt
Сейчас ещё пытался организовать парсинг аргументов для команды attrib (http://ab57.ru/cmdlist/attrib.html) и там вот прям конкретно встрял. Подскажите как реализовать указание добавления и снятия атрибута.
Офлайн
103
не
с виндовсом я вам никак не помогу
гугл в помощь
Офлайн
0
terabayt
Да там не в винде вообще суть. У меня ни как не получается реализовать 2 необязательных позиционных аргумента.
Нужно, чтобы парсер аргументов распознавал записи вида:
my_attrib.py +r ./my_file - добавляет атрибут файлу
my_attrib.py -r ./my_file - снимает атрибут у файла
Ума не приложу именно как добавить действия (- и +). Если использовать обычные имена то все просто, а вот в таком случае не представляю, что делать.
Отредактировано maxim83632 (Дек. 6, 2015 00:20:07)
Офлайн
857
Просто делаешь несколько исключающих групп и добавляешь в парсер.
python.org. mutually exclusive group
Офлайн
0
py.user.nextУ меня проблема не в том, чтобы результате у каждого ключа было только 1 значение, а в том, что я не могу просто на пример установить в качестве ключа
Просто делаешь несколько исключающих групп и добавляешь в парсер.
-
Офлайн
857
import argparse parser = argparse.ArgumentParser(prefix_chars='-+/', add_help=False) group_r = parser.add_mutually_exclusive_group() group_r.add_argument('-r', dest='roff', action='store_true', help='r off') group_r.add_argument('+r', dest='ron', action='store_true', help='r on') group_h = parser.add_mutually_exclusive_group() group_h.add_argument('-h', dest='hoff', action='store_true', help='h off') group_h.add_argument('+h', dest='hon', action='store_true', help='h on') parser.print_help() parser.parse_args('-r +h'.split())
Отредактировано py.user.next (Дек. 6, 2015 04:25:21)
Офлайн