Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Argparse:可选参数中的参数_Python_Command Line Arguments_Argparse_Optional Arguments - Fatal编程技术网

Python Argparse:可选参数中的参数

Python Argparse:可选参数中的参数,python,command-line-arguments,argparse,optional-arguments,Python,Command Line Arguments,Argparse,Optional Arguments,我正在编写一个脚本,它可以根据传递到命令行的参数执行多项操作。例如: #changed and simplified from actual code parser.add_argument('-a','--apple') parser.add_argument('-b','--boy') parser.add_argument('-c', '--car') parser.add_argument('-d', '--dog') args = parser.parse_args() python

我正在编写一个脚本,它可以根据传递到命令行的参数执行多项操作。例如:

#changed and simplified from actual code
parser.add_argument('-a','--apple')
parser.add_argument('-b','--boy')
parser.add_argument('-c', '--car')
parser.add_argument('-d', '--dog')
args = parser.parse_args()
python test.py -a apple aardvark aquaman
在命令行中我只需要一个参数。因此,只接受-a,-b,-c,-d中的一个,然后代码将根据传递的参数执行

我可以通过一系列if语句来实现,比如

if args.a:
if args.b:
等等,有没有更好的方法

对于每个命令行选项-a、-b、-c、-d,我希望传入一些参数。这些参数是特定的,并且根据初始命令行选项的不同而有所不同。例如:

#changed and simplified from actual code
parser.add_argument('-a','--apple')
parser.add_argument('-b','--boy')
parser.add_argument('-c', '--car')
parser.add_argument('-d', '--dog')
args = parser.parse_args()
python test.py -a apple aardvark aquaman
我考虑过使用NARG,但我不确定如何使每个论点都是正确的

以正确的顺序和 需要的论点。在上面的示例中,假设额外可选参数的数量为3,我希望确保所有参数都以字母a开头。
如何实现此目的?

您可以使用以下方法定义互斥选项:

关于第二部分,您可以指定NARG和自定义类型。该类型可以是接受参数字符串的函数:

def check_a(val):
    if not val or not val[0] == 'a':
        raise argparse.ArgumentTypeError('Must be a value starting with a')
    return val

parser.add_argument('-a', '--apple', nargs=3, type=check_a)
关于传递给option apple AFAIK的参数顺序,您必须在之后进行检查:

args = parser.parse_args()
if is_wrong_order(args.apple):
    parser.error('Incorrect argument order to apple')

无论如何,在您的情况下,您可能希望使用而不是选项。

谢谢!我会试试这个。快速问题,当您执行type=check_a时,为什么在函数需要参数val时不传入参数?还有另一个问题。我对argparse的一切都很陌生。您将如何访问check_a的返回值?它是否类似于args.apple.type?@helloworld95我将函数作为参数传递,而不是调用它。argparse将调用该函数,并将返回值作为列表存储在args.apple中,如我在上一个示例中所示。