Найти - Пользователи
Полная версия: Работа с argparse
Начало » Python для новичков » Работа с argparse
1
maxim83632
Мне нужено сделать аналог команды 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)

Из консоли его можно вызывать только так:
my_dir.py –path=C:\
а мне надо, чтобы можно было не писать –path, возможно это сделать?
terabayt
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()

maxim83632
terabayt
эт просто стиль
https://docs.python.org/3/library/argparse.html#name-or-flags и это https://docs.python.org/3/howto/argparse.html#introducing-optional-arguments тогда как понимать?
maxim83632
terabayt
Сейчас ещё пытался организовать парсинг аргументов для команды attrib (http://ab57.ru/cmdlist/attrib.html) и там вот прям конкретно встрял. Подскажите как реализовать указание добавления и снятия атрибута.
terabayt
не
с виндовсом я вам никак не помогу
гугл в помощь
maxim83632
terabayt
Да там не в винде вообще суть. У меня ни как не получается реализовать 2 необязательных позиционных аргумента.
Нужно, чтобы парсер аргументов распознавал записи вида:
my_attrib.py +r ./my_file - добавляет атрибут файлу
my_attrib.py -r ./my_file - снимает атрибут у файла
Ума не приложу именно как добавить действия (- и +). Если использовать обычные имена то все просто, а вот в таком случае не представляю, что делать.
py.user.next
Просто делаешь несколько исключающих групп и добавляешь в парсер.
python.org. mutually exclusive group
maxim83632
py.user.next
Просто делаешь несколько исключающих групп и добавляешь в парсер.
У меня проблема не в том, чтобы результате у каждого ключа было только 1 значение, а в том, что я не могу просто на пример установить в качестве ключа
-
py.user.next
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())
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB