【问题标题】:How to pass an argument calling a function using ArgParse?如何使用 ArgParse 传递调用函数的参数?
【发布时间】:2023-01-06 22:34:41
【问题描述】:

我正在尝试使用参数调用 function_3,但收到无法识别参数的错误。我是这样打电话的:python script.py --pass test

import argparse
import sys

def function_1():
    print('Function 1')

def function_2():
    print('Function 2')

def function_3(arg):
    print(f'Function 3 {arg}')

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()
    
    parser_f1 = subparsers.add_parser('fc1', help='Function 1')
    parser_f1.set_defaults(func=function_1)

    parser_f2 = subparsers.add_parser('fc2', help='Function 2')
    parser_f2.set_defaults(func=function_2)

    parser_f3 = subparsers.add_parser('fc3', help='Function 3')
    parser_f3.add_argument("pass", help="function 3 argument")
    parser_f3.set_defaults(func=function_3)
        
    if len(sys.argv) <= 1:
        sys.argv.append('--help')

    options = parser.parse_args()
    options.func()

【问题讨论】:

    标签: python command-line-interface argparse


    【解决方案1】:

    首先,您的pass 选项仅适用于fc3 子解析器,因此您需要的不是python script.py --pass test,而是:

    python script.py fc3 --pass test
    

    但是你定义了一个定位的参数,而不是命令行选项。您需要像这样调用您的脚本:

    python script.py fc3 test
    

    或者您需要修复代码:

    parser_f3.add_argument('--pass', help='function 3 argument')
    

    这将允许您运行python script.py fc3 --pass test


    代码还有其他问题;你的 function3 函数需要一个参数,但你调用 options.func() 时没有参数,这将导致 TypeError 异常。

    【讨论】:

    • name or flags 突出显示了位置参数(名称)或命令行选项(标志)的组成部分。
    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 2016-05-18
    • 2012-05-21
    • 1970-01-01
    • 2013-11-30
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多