argv
модуля sys
.import sys
print(sys.argv)
python3 test.py a 24 --test "long arg" ['test.py', 'a', '24', '--test', 'long arg']
-
-x 258
), а флаги — нет (-x
).-o file.txt --output-file file.txt -v --verbose
python3 script.py -v -o file.txt Arg1 Arg2
Для разбора аргументов командной строки в стандартной библиотеке есть модуль argparse
.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbose", action="store_true",
default=False, help="Подробный вывод")
parser.add_argument("-i", "--input", action="store", required=True,
help="Входной файл (обязательный аргумент)")
parser.add_argument("-o", "--output", action="store", default="out.dat",
help="Выходной файл (по умолчанию out.dat)")
parser.add_argument('var', type=int,
help='Первый обязательный аргумент')
parser.add_argument('livar', nargs='+',
help='Один или более обязательных аргументов')
args = parser.parse_args()
> python3 test.py usage: test.py [-h] [-v] -i INPUT [-o OUTPUT] var livar [livar ...] test.py: error: the following arguments are required: -i/--input, var, livar > python3 test.py -h usage: test.py [-h] [-v] -i INPUT [-o OUTPUT] var livar [livar ...] positional arguments: var Первый обязательный аргумент livar Один или более обязательных аргументов optional arguments: -h, --help show this help message and exit -v, --verbose Подробный вывод -i INPUT, --input INPUT Входной файл (обязательный аргумент) -o OUTPUT, --output OUTPUT Выходной файл (по умолчанию out.dat)
print(args)
print(args.verbose)
print(args.input)
print(args.output)
print(args.var)
print(args.livar)
> python3 test.py -i input.txt -o output.dat -v 43 a b c Namespace(input='input.txt', livar=['a', 'b', 'c'], output='output.dat', var=43, verbose=True) True input.txt output.dat 43 ['a', 'b', 'c']
python3 -u -B test.py
, они недоступны скрипту.*.txt
. При этом в sys.argv
окажется список всех .txt
файлов в текущей папке подряд. Для разбора таких аргументов нужно использовать nargs='+
' в argparse
.-v 3
), а многократное указание одного и того-же ключа (-v -v -v
), с другой стороны принятый в С подход с группировкой ключей (-vvv
) в argparse
не поддерживается.argparse
подробно описано в документации.