我希望有一个脚本,该脚本带有命令行参数,包括带有位置参数本身的标志选项。我可能希望命令行输入看起来像
$ ./script.py [-o <file1> <file2> ...] inputfile
argparse documentation官员最类似地谈论
parser.add_argument("-v", "--verbosity", type=int, help="increase output verbosity")
args = parser.parse_args()
用户在-v
标志之后输入单个位置子参数(可能是一组选项中的一个)。然后,此位置子参数存储在args.verbosity
中。
因此,似乎标志的参数需要包含在同一行add_argument()
中。您可以为此子参数的变量声明任何特殊名称(例如args.outputfile1
)吗?该标志可以采用多个子参数吗?您可以调整子变量在帮助菜单中的外观吗?默认情况下,它类似于-o OUTPUT, --output OUTPUT Save output data to a file OUTPUT
。我们可以更改为读取-o <SomethingElse>
吗?
还有更多讨论此方面的文档吗?
答案 0 :(得分:1)
您建议的界面非常不寻常。人们多次指定相同的选项更为常见,因为tt很难区分./script.py [-o file1 file2 ...]
输入文件和./script.py [-o file1] file2 inputfile
。那可能还不是问题,但是当您添加选项或禁止使用的参数时,您不寻常的设计将成为问题。
我建议您采用以下解决方法之一:
1。重复选项标志
./script.py -o file1 -o file2 inputfile
2。将您的选项设为布尔标志
更改您的API,以便-o
指示除最后一个参数外的所有参数均为输出文件:
./script.py -o output1 output2 ... inputfileislast
答案 1 :(得分:1)
具有如下定义:
parser.add_argument('-o','--output', dest='output_file_name', nargs='+')
您可以使用以下命令行:
$ ./script.py -o file1 file2
并获得等于args.output_file_name
的{{1}}。 “ +”表示一个或多个参数(记录了其他['file1','file2']
值)。
但是
nargs
'an_input_file'转到位置参数的位置很难实现。 '*'是贪婪的,占据一切,为位置保留任何内容。最好定义另一个可选的
$ ./script.py -o file1 file2 an_input_file
如果将'-o'定义为'append'操作,则可以使用:
parser.add_argument('-i','--input')
$ ./script.py -o file1 file2 -i an_input_file
通常,您可以通过使用可选项获得最佳控制。位置表示法是根据位置而不是值进行“解析”的,因此更难以在精美的组合中使用。
使用$ ./script.py -o file1 -o file2 -i an_input_file
参数可以更改metavar
的显示。