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

Чтобы сделать из скрипта целостную программу, которую смогут запускать другие пользователи или другие программы необходимо предоставить интерфейс для её использования 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 

>>>