Вызов функции с аргументами из консоли

Рейтинг: 1Ответов: 1Опубликовано: 06.06.2023

Есть функция

def func(file, name):
    ...

Она принимает два аргумента, но у меня не получается вызвать эту функцию через консоль с аргументами. В консоли пишу вот так: python main.py func(file, name), но результата нет.

извините, не до конца разобрался с темой, нужно сделать это через cli Решил использовать click

Ответы

▲ 2

Вы можете передать в файл аргументы через командную строку и прочитать их с помощью из списка sys.argv.

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

Пример кода с возможностью запуска нескольких функций из командной строки:

import sys 

# Доверенные методы, только их можно будет вызвать из командной строки
# Сделано для повышения безопасности
ACCESSED_METHODS = [
    "test_one",
    "test_two"
]

# Обрезаем переданные аргументы, первым всегда является путь к исполняемому файлу
args = sys.argv[1:]

# Если не передано аргументов завершаем программу
if len(args) < 1:
    print("Не передано название метода. Пример: python main.py function arg1 arg2")
    exit(1)

# Тестовые методы
def test_one(arg1: str, arg2: str, *args):
    return f"Первый метод. Переданные аргументы: {arg1, arg2, args}"

def test_two(*args):
    return f"Второй метод. Переданные аргументы: {args}"


if __name__ == '__main__':
    # Имя нужной функции записано в переменную func
    func = args[0]
    # Передаваемые к ней аргументы записываются в переменную func_args
    func_args = args[1:]

    if func not in ACCESSED_METHODS:
        print(f"Метода не существует или он запрещён: {func}")
        exit(1)

    # Вызываем функцию и передаём аргументы
    result = eval(func)(*func_args)

    # Результат будет выводиться в консоль
    print(result)

Таким образом вызывая из командной строки файл, нужно будет передать имя функции и её аргументы: python main.py test_one 1 2 3