2017-02-08 4 views
0

私はそうのような引数のパーサがあります。今`argparse`からすべてのデフォルトを取得するには?

def args_parser(): 
    parser = argparse.ArgumentParser(description='myparser') 
    parser.add_argument('--k', type=int, default=100, help = 'numbers') 
    return parser 

を、私がやりたいすべてがちょうどそうのように、デフォルトのマッピングを取得している:

args = args_parser() 

そして私はargs['k']100を返すようにしたいです、これがデフォルトです。これをどうやって起こさせるのですか?

+0

'引数= args_parser()。 parse_args() '? 'args.k'を実行して' 100'を得る必要がありますが、そうでなければ... – jonrsharpe

+0

'parser.parse_args()。k' – metatoaster

答えて

0

をあなたが実際に解析されたコマンドライン引数を返すために、あなたのパーサーオブジェクト上.parse_args()関数を呼び出す必要があります:私はあなたにもArgumentParser上のPythonのドキュメントでこれを見つけることができるはずだと思います.add_argument()ステートメントで定義されている属性に割り当てられます。だから、のようなもの:

parser = args_parser() 
args = parser.parse_args() 
k_value = args.k 

.parse_argsによって返された「引数」変数は、()はデフォルトがない場合も、あなたは.add_argument()呼び出しを介して、それに割り当てる名に対応する割り当てられた属性を持っているとしますユーザーが与えられた引数を提供しない場合、その値は 'None'になります。

1

これはこれを行う必要があります。

vars(args.parse_args())['k'] 
0
def args_parser(): 
    parser = argparse.ArgumentParser(description='myparser') 
    parser.add_argument('--k', type=int, default=100, help = 'numbers') 
    return parser 

parser = args_parser(): 
args = parser.parse_args([])  
print(args)  # see all values 
print(args.k) # see just the k attribute 

parse_args()コマンドラインで提供されるsys.argvを解析。 parse_args([])は引数なしでスクリプトを呼び出したのと同じように、空のリストを解析します。私は定期的にこのような呼び出しでパーサーの設定をテストします。

引数定義では[]が正常に動作し、デフォルトのkの値が表示されます。他の定義では、[]がエラーを生成する可能性があります。たとえば、含まれている場合は、

parser.add_argument('infile', help='positional file name') 

の文字列が必要です。そのような単純な位置については、デフォルトは必要でもなく、意味がありません。しかし、他のパラメータの組み合わせでは、デフォルトを使用することができます。

add_argumentコマンドで設定されたdefaultにアクセスする方法を示すことができますが、これには文書化されていない機能が含まれています。さらに、デフォルトを定義するいくつかの方法があり、トピックが複雑になる可能性があります。

とにかく、空のリストでparse_argsを実行するだけで十分です。

また、それは少しの追加のヘルプラインのデフォルト表示することができます:インタラクティブipythonセッションで、例えば

parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s') 

を:

In [73]: parser=argparse.ArgumentParser() 
In [74]: parser.add_argument('--k', type=int, default=100, help = 'numbers, %(default)s') 
Out[74]: _StoreAction(option_strings=['--k'], dest='k', nargs=None, 
    const=None, default=100, type=<class 'int'>, choices=None, 
    help='numbers, %(default)s', metavar=None) 

In [75]: parser.print_help() 
usage: ipython3 [-h] [--k K] 

optional arguments: 
    -h, --help show this help message and exit 
    --k K  numbers, 100 

In [76]: parser.parse_args([]) # displays args 
Out[76]: Namespace(k=100) 
In [78]: parser.parse_args(['--k','200']) 
Out[78]: Namespace(k=200) 
関連する問題