如何将互斥参数作为变量传递

时间:2014-08-27 04:12:27

标签: python arguments argparse

我正在学习使用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()处停止,并且从不说明之后如何处理互斥参数。但是知道如何将互斥参数传递给代码的其余部分非常重要。

2 个答案:

答案 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将属性保留在命名空间之外(除非在命令行中给出)。