Значение имени аргументов
могу ли я использовать argparse
читать именованные аргументы командной строки, которые не должны быть в определенном порядке? Я просмотрел документация но большинство из них сосредоточено на отображении контента на основе предоставленных аргументов (например,--h
).
прямо сейчас мой скрипт читает упорядоченные, неназванные аргументы:
myscript.py foo-val bar-val
используя sys.argv
:
foo = sys.argv[1]
bar = sys.argv[2]
но я хотел бы изменить входной так что это порядок агностик, называя аргументы:
myscript.py -- bar=bar-val --foo=foo-val
2 ответов
можно использовать Дополнительные Параметры вот так:
import argparse, sys
parser=argparse.ArgumentParser()
parser.add_argument('--bar', help='Do the bar option')
parser.add_argument('--foo', help='Foo the program')
args=parser.parse_args()
print args
print sys
тогда, если вы называете это ./prog --bar=bar-val --foo foo-val
он печатает:
Namespace(bar='bar-val', foo='foo-val')
['Untitled 14.py', '--bar=bar-val', '--foo', 'foo-val']
или, если пользователь хочет помочь argparse строит это тоже:
$ ./prog -h
usage: Untitled 14.py [-h] [--bar BAR] [--foo FOO]
optional arguments:
-h, --help show this help message and exit
--bar BAR Do the bar option
--foo FOO Foo the program
ответ да. Быстрый взгляд на документация argparse ответил бы также.
вот очень простой пример, argparse способен обрабатывать гораздо более конкретные потребности.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', '-f', help="a random options", type= str)
parser.add_argument('--bar', '-b', help="a more random option", type= int, default= 0)
print(parser.format_help())
# usage: test_args_4.py [-h] [--foo FOO] [--bar BAR]
#
# optional arguments:
# -h, --help show this help message and exit
# --foo FOO, -f FOO a random options
# --bar BAR, -b BAR a more random option
args = parser.parse_args("--foo pouet".split())
print(args) # Namespace(bar=0, foo='pouet')
print(args.foo) # pouet
print(args.bar) # 0
Off конечно, в реальном скрипте вы не будете жестко кодировать параметры командной строки и вызовете parser.parse_args()
(без аргументов), а не. Это заставит argparse взять sys.args
список в качестве аргументов командной строки.
вы сможете назовите этот скрипт так:
test_args_4.py -h # prints the help message
test_args_4.py -f pouet # foo="pouet", bar=0 (default value)
test_args_4.py -b 42 # foo=None, bar=42
test_args_4.py -b 77 -f knock # foo="knock", bar=77
вы откроете для себя много других функций, прочитав док ;)