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 に答える