Аргументы командной строки

Аргументы командной строки

Чтобы сделать из скрипта целостную программу, которую смогут запускать другие пользователи или другие программы необходимо предоставить интерфейс для её использования API. Один из видов API — интерфейс для командной строки. В качестве примера программы с таким интерфейсом можно привести компиляторы, а также интерпретатор CPython.

sys.argv

Рассмотрим скрипт myscript.py с следующим содержимым

import sys

print(sys.argv)

Обычный запуск скрипта будет выглядеть как-то так

>>> python myscript.py
['myscript.py'] 

>>>

Но можно передать аргументы скрипту при его запуске, указывая их после имени скрипта

>>> python python myscript.py arg1 arg2 arg3
['myscript.py', 'arg1', 'arg2', 'arg3']

>>>

На первом месте всегда идёт имя скрипта, а далее аргументы командной строки. Далее можно выстроить логику программу таким образом, чтобы учитывать значения переданных параметров. Обычно для этого используют модуль стандартной библиотеки argparse.

argparse

Рассмотрим базовые возможности модуля argparse.

Предположим файл myscript.py имеет следующее содержимое.

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--config', default='default_config.json', help='Путь к конфигурационному файлу')
parser.add_argument('-o', required=True, help='Папка для записи результатов вычисления')
parser.add_argument('-n', type=int, default=100, help='Количество разбиений по оси времени')
args = parser.parse_args()

print(args)

Объявлено три ожидаемых аргумента

  • путь к конфигурационному файлу по ключу --config с значением по умолчанию;

  • название папки (ключ -o), в которую следует записать результаты всех вычислений. Т.к. важно не перезаписывать предыдущие результаты, то этот аргумент сделаем обязательным;

  • количество разбиений по оси t, которое необходимо использовать для расчетов. Явно укажем здесь, что ожидается целое число.

Для каждого параметра указана справочная информация, которую можно теперь получить следующим образом.

>>> python myscript.py --help
usage: myscript.py [-h] [--config CONFIG] -o O [-n N]

optional arguments:
  -h, --help       show this help message and exit
  --config CONFIG  Путь к конфигурационному файлу
  -o O             Папка для записи результатов вычисления
  -n N             Количество разбиений по времени
  

А запустить скрипт можно, передавая ему разные значения.

>>> python myscript.py --config config.json -o somefolder -n 300
Namespace(config='config.json', n=300, o='somefolder')

>>> python myscript.py --config config.json -o somefolder 
Namespace(config='config.json', n=100, o='somefolder')

>>> python myscript.py
usage: myscript.py [-h] [--config CONFIG] -o O [-n N]
myscript.py: error: the following arguments are required: -o 

>>>