Передача атрибутов при запуске из командной строки

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

Пример:

#python main.py -start -i -config="config.json" -no-log

Ответы (1 шт):

Автор решения: Alexey Trukhanov

В общем случае, есть объект .argv из библиотеки sys, в котором будет размещено все, что Вы введете в командную строку через пробел.

import sys

for param in sys.argv: 
    print(param)

Если Вы, например введете, что-то типа:

#python main.py -config new_config.json

То, каждый из набора символов, разделенных пробелами: main.py, -config и new_config.json будет лежать как строковое значение в sys.argv[0], sys.argv[1] и sys.argv[2] соответственно. Обратите внимание, что в sys.argv[0] всегда лежит имя запускаемого скрипта. Таким образом, Вы можете использовать эти параметры для изменения поведения Вашего скрипта.

Но разбирать такую строку ужасно неудобно, поэтому есть более удобные модули, например, argparse. Вам лучше почитать документацию, это достаточно мощный инструмент.

Но, в общем случае это выглядит как-то так:

import argparse

if __name__ == '__main__':
    # определяем объект ArgumentParser
    parser = argparse.ArgumentParser()

    # добавляем параметр, который мы ожидаем на входе из командной строки
    # повторяем эту строку по количеству параметров
    parser.add_argument('-c', '--config_file', type=str, help='Name of the config file', default='config.json')

    # в этот объект попадут все разобранные параметры
    args = parser.parse_args()

    print(args.config_file)   

Теперь, когда Вы введете в командную строку

#python main.py --config_file new_config.json

или

#python main.py -c new_config.json

то в свойстве args.config_file окажется new_config.json и Вы его используете.

Остальное в документации там много всего.

→ Ссылка