我正在学习使用argparse在Python中处理命令行参数。虽然不是互斥的参数可以作为变量传递,但我不清楚如何对互斥参数进行相同的操作。在下面的示例中,我想打印出所有参数。前两个很容易。然而,第三个是棘手的,因为' -a'和' -b'有不同的目的地名称。因此,最后两行不能同时存在于代码中。
#/usr/bin/env python
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-t' dest='thread', help='gtdownload thread', default=4, type=int)
parser.add_argument('-n' dest='number', help='number of downloads', default=1, type=int)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-a', dest='analysis', help='analysis ID')
group.add_argument('-b', dest='barcode', help='barcode')
args = parser.parser_args()
print args.thread
print args.number
#???? how to print out mutually exclusive argument
print args.analysis
print args.barcode
关于add_mutually_exlusive_group的大部分教程都在parser.parser_args()处停止,并且从不说明之后如何处理互斥参数。但是知道如何将互斥参数传递给代码的其余部分非常重要。
答案 0 :(得分:1)
if args.analysis is not None:
print args.analysis
if args.barcode is not None:
print args.barcode
答案 1 :(得分:0)
通过在组中放置-a
和-b
,如果在命令行中同时使用这两个选项,那么您告诉解析器的所有内容都会引发错误。
打印args
,您将看到命名空间中存在这两个属性。该组只确保其中一个将具有其默认值(None
)。另一个将具有您在命令行中给出的值。否则这些属性就像其他属性一样。
print args # a very useful statement when debugging argparse
(该组也会影响使用情况显示)。
您必须使用default=argparse.SUPPRESS
将属性保留在命名空间之外(除非在命令行中给出)。