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

1 投票
2 回答
768 浏览
提问于 2025-04-18 18:40

我在学习如何在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 个回答

0

-a-b 放在一起,实际上就是在告诉程序,如果你在命令行中同时使用这两个选项,就会报错。

打印 args,你会发现这两个属性都在命名空间里。这个组合只是确保其中一个会有默认值(None),而另一个则会是你在命令行中输入的值。否则,这些属性就和其他属性一样。

print args  # a very useful statement when debugging argparse

(这个组合还会影响使用说明的显示)。

如果你想让某个属性不出现在命名空间里(除非在命令行中给出),你需要使用 default=argparse.SUPPRESS

1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某些功能没有按照预期工作。这种情况可能会让人感到困惑,因为我们可能不知道问题出在哪里。

通常,这种问题可能是因为我们没有正确地使用这个库,或者是因为我们对它的理解不够深入。为了找到解决办法,我们可以查看一些文档,或者在网上搜索相关的信息,看看其他人是怎么解决类似的问题的。

另外,有时候我们也可以在社区网站上提问,像StackOverflow这样的地方,很多人会乐意帮助你。记得在提问的时候,尽量把问题描述清楚,这样别人才能更好地理解你的困扰。

总之,遇到问题时不要着急,慢慢查找资料,或者向别人请教,通常都能找到解决的办法。

if args.analysis is not None:
    print args.analysis

if args.barcode is not None:
    print args.barcode

撰写回答