Если используется argparse
, аргумент ключевого слова default
является хорошим стандартным способом решения проблемы; встроить поведение программы по умолчанию в исходный код скрипта, а не во внешний файл конфигурации. Однако, если у вас есть несколько файлов конфигурации, которые вы хотите развернуть по-разному, упомянутый вами подход (предварительно сгенерированный из входных данных) является желательным.
argparse
в словарь
Пространство имен argparse
можно преобразовать в словарь. Это удобно, поскольку мы можем создать функцию, которая принимает словарь или аргументы ключевых слов, и заставить ее обрабатывать программу с помощью удобной сигнатуры функции. Также файловые парсеры могут так же легко загружать словари и взаимодействовать с одной и той же функцией. Модуль python json
используется в качестве примера. Конечно, можно использовать и другие.
Пример Python
def main(arg1=None, arg2=None, arg3=None):
print(f"{arg1}, {arg2}, {arg3}")
if __name__ == "__main__":
import sys
import json
import argparse
# script called with nothing -- load default
if len(sys.argv) == 1:
with open("default.json", "r") as dfp:
conf = json.load(dfp)
main(**conf)
else: # parse arguments
parser = argparse.ArgumentParser()
parser.add_argument('-a1', dest='arg1', metavar='arg1', type=str)
parser.add_argument('-a2', dest='arg2', metavar='arg2', type=str)
parser.add_argument('-a3', dest='arg3', metavar='arg3', type=str)
args = parser.parse_args()
conf = vars(args)
main(**conf)
по умолчанию. json
{
"arg1" : "str1",
"arg2" : "str2",
"arg3" : "str3"
}
Использование Fire
Модуль python Fire
также можно использовать более удобно. Он имеет несколько режимов, с которыми файл может взаимодействовать с минимальными усилиями. Репозиторий Github доступен здесь .