Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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_Argparse - Fatal编程技术网

Python Argparse:格式化参数

Python Argparse:格式化参数,python,argparse,Python,Argparse,我想以各种方式传递参数,如: python abc.py 1 2 python abc.py -d 3 python abc.py -c 6 我已经试过了,但我可以用 python abc.py def 1 2 python abc.py spec -d 3 python abc.py spec -c 6 这可能吗?在argparse.add_argument中,您可以提供参数文本,而不是作为字符串,而是作为字符串列表,因此具有相同参数的多种形式。 仔细浏览-此模块可以完成您需要的所有操作

我想以各种方式传递参数,如:

python abc.py 1 2
python abc.py -d 3 
python abc.py -c 6
我已经试过了,但我可以用

python abc.py def 1 2
python abc.py spec -d 3
python abc.py spec -c 6

这可能吗?

argparse.add_argument
中,您可以提供参数文本,而不是作为字符串,而是作为字符串列表,因此具有相同参数的多种形式。
仔细浏览-此模块可以完成您需要的所有操作

一个解析器有两个
选项
类型
int
,和一个
位置
类型
nargs='*'
,将接受您的3个输入。您对输入有更多的限制吗?

我认为您的情况不需要subparser。像这样的事情应该可以:

import argparse


parser = argparse.ArgumentParser()
parser.add_argument('-d', type=int, nargs='?')
parser.add_argument('-c', type=int, nargs='?')
parser.add_argument('args', type=int, nargs='*')

print(parser.parse_args())
其结果是:

$python3 test_argparse.py 1 2                                                 
Namespace(args=[1, 2], c=None, d=None)                                                                           
$python3 test_argparse.py -d 3
Namespace(args=[], c=None, d=3)
$python3 test_argparse.py -c 6
Namespace(args=[], c=6, d=None)

如果希望选项互斥,则argparse提供了一个。不幸的是,位置总是被认为是必需的,因此,如果您不希望用户在指定给定选项时使用位置,则必须手动检查位置(但是我相信在这种情况下,您的命令界面不好)。

问题太广泛了。你能举个具体的例子吗?例如,您希望如何使用这些命令行参数?对于这个简单的规范,默认的
nargs
就足够了。