3

有可能有这样的参数解析器吗?

import argparse
parser.add_argument('query2target.bam', help='A bam file containing contigs from \'query\' aligned to contigs in \'target\'')
args = parser.parse_args()
q2t = args.query2target.bam

我希望解析器名称为“query2target.bam”,但是当我在它之后命名一个变量时,q2t = args.query2target.bam它认为扩展是一个函数方法。如何在不重命名参数的情况下解决这个问题?

4

3 回答 3

3

使用dest参数。

parser.add_argument('query2target.bam', dest='query2target', help="...")
args = parser.parse_args()
q2t = args.query2target

http://docs.python.org/dev/library/argparse.html

于 2012-06-18T18:42:25.690 回答
2

Python 对象实际上可以具有名称包含点的属性。你可以看到他们打印__dict__你的变量的属性,args看起来像:

>>> print args.__dict__
{'query2target.bam': 'your-argument-value'}

getattr()您可以使用内置函数轻松提取此属性的值:

q2t = getattr(args, 'query2target.bam')

但仍然可能更好地遵守约定。

于 2012-06-18T18:54:23.610 回答
2

别介意我之前的回答。这个问题实际上有一个干净的解决方案;为编写自定义操作ArgumentParser

import argparse

class Q2TAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string):
        self.query2target = values

parser = argparse.ArgumentParser()
q2taction = parser.add_argument("query2target.bam", action=Q2TAction)
parser.parse_args()

print(q2taction.query2target)
于 2012-06-18T20:07:28.450 回答