python3 Выполнить функцию, когда аргумент командной строки TRUE - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть две функции: (1) запуск демонстрационного анализа и (2) пользовательская функция, которая читается через файл. Я хотел бы передать аргумент командной строки, чтобы пользователь мог выбрать либо демонстрационную функцию, либо пользовательскую функцию как true или false. Никакие другие значения не должны быть переданы. Я не уверен, что я должен добавить в функцию, чтобы принять arg.parse

def demo()
    print("This is demo function")

def custom()
    print("This is custom function")


def main():
    parser = argparse.ArgumentParser(description="Argument Parser is boolean to run Pipeline'")
    parser.add_argument("--demo", help='Demo data to show an example')
    parser.add_argument("--custom", help='Specify custom analysis, sql query is read from userquery.sql')
    args = parser.parse_args()

    if args.demo == True:
        demoanalysis()
    elif args.custom == True:
        customanalysis()
    else:
        print("Don't do anything")

Однако, когда я запускаю скрипт, он сразу переходит к третьему варианту.

python script.py --demo True --custom False
Don't do anything

Я понимаю, что что-то должно быть передано каждой функции, чтобы принять логические аргументы, но не знаю, как это сделать. Какие-либо предложения. Благодарю.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы также можете построить функцию, чтобы проверить, является ли аргумент, переданный функции, действительным:

def main():
    parser = argparse.ArgumentParser(description="Argument Parser is boolean to run Pipeline'")
    # Here you add a type definition to your arguments
    parser.register('type', 'bool', (lambda x: str(x).lower() == "true") )
    parser.add_argument("--demo", type="bool", help='Demo data to show an example')
    parser.add_argument("--custom", type="bool", help='Specify custom analysis, sql query is read from userquery.sql')
    args = parser.parse_args()

    if args.demo:
        demoanalysis()
    elif args.custom:
        customanalysis()
    else:
        print("Don't do anything")
0 голосов
/ 06 сентября 2018

Полагаю, вы можете использовать аргумент action="store_true" (больше в документах ):

def main():
    parser = argparse.ArgumentParser(description="Argument Parser is boolean to run Pipeline'")
    parser.add_argument("--demo", action="store_true", help='Demo data to show an example')
    parser.add_argument("--custom", action="store_true", help='Specify custom analysis, sql query is read from userquery.sql')
    args = parser.parse_args()

    if args.demo:  # need no comparison with True, because demo is True or False itself
        demoanalysis()
    elif args.custom:
        customanalysis()
    else:
        print("Don't do anything")

Редактировать : Если в аргументе командной строки нет ключевого слова, store_true создает значения False по умолчанию. Примеры использования:

python demo_script.py --demo  # prints "This is demo function"
python demo_script.py --custom  # prints "This is custom function"

Надеюсь, это поможет!

...