如何将互斥参数作为变量传递
我在学习如何在Python中使用argparse处理命令行参数。对于那些可以同时使用的参数,传递它们作为变量很简单,但对于互斥参数,我就不太明白该怎么做了。在下面的例子中,我想打印出所有的参数。前两个参数很简单。但是第三个就有点棘手,因为'-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_exclusive_group的教程都只讲到parser.parser_args(),然后就不再说明互斥参数之后该怎么处理了。但其实,了解互斥参数如何传递给后面的代码是非常重要的。
2 个回答
把 -a
和 -b
放在一起,实际上就是在告诉程序,如果你在命令行中同时使用这两个选项,就会报错。
打印 args
,你会发现这两个属性都在命名空间里。这个组合只是确保其中一个会有默认值(None
),而另一个则会是你在命令行中输入的值。否则,这些属性就和其他属性一样。
print args # a very useful statement when debugging argparse
(这个组合还会影响使用说明的显示)。
如果你想让某个属性不出现在命名空间里(除非在命令行中给出),你需要使用 default=argparse.SUPPRESS
。
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不知道问题出在哪里。
通常,这种问题可能是因为我们没有正确地使用这个库,或者是因为我们对它的理解不够深入。为了找到解决办法,我们可以查看一些文档,或者在网上搜索相关的信息,看看其他人是怎么解决类似的问题的。
另外,有时候我们也可以在社区网站上提问,像StackOverflow这样的地方,很多人会乐意帮助你。记得在提问的时候,尽量把问题描述清楚,这样别人才能更好地理解你的困扰。
总之,遇到问题时不要着急,慢慢查找资料,或者向别人请教,通常都能找到解决的办法。
if args.analysis is not None:
print args.analysis
if args.barcode is not None:
print args.barcode