2017-08-04 21 views
-1

私はArgparserのためにこのコードのようなものを書いています。すべてうまく動作しますが、なぜ '--h'または '--help'オプションが読みにくいのか不思議です。argparse -hは不器用で、カンマ区切りの値を受け入れることはできません

import argparse 

def parse_args(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("-i", "--input_file_path", type=str, nargs=1, help="input file") 
    parser.add_argument("-m", "--method_type", type=str, nargs='*', help="message") 
    parser.add_argument("-o", "--output_file_path", type=str, help="output file") 
    args = parser.parse_args() 
    return args 

arguments = parse_args() 

私はfilename.py -hを指定すると、それはなぜそれが「-h」または--helpが発行された同じキーを複数回を示してい

usage: parser.py [-h] [-i INPUT_FILE_PATH] 
     [-o OUTPUT_FILE_PATH] 

optional arguments: 
    -h, --help   show this help message and exit 
    -i INPUT_FILE_PATH, --input_file_path INPUT_FILE_PATH 
         input file 
-m [METHOD_TYPE [METHOD_TYPE ...]], --method_type [METHOD_TYPE [METHOD_TYPE ...]] 
         message 
    -o OUTPUT_FILE_PATH, --output_file_path OUTPUT_FILE_PATH 
         output file 

のようなものを示しています。もう一つの質問は、現在、 'method_type'には、空白で区切られた値、例えば python filename.py -i input.txt -m hello1 hello2 -o output.txtを受け入れることです。

def parser(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument("-i", "--input_file_path", metavar='PATH', help="input file") 
    parser.add_argument("-m", "--method_type", metavar='FILE', nargs='*', help="message") 
    parser.add_argument("-o", "--output_file_path", metavar='PATH', help="output file") 
    return parser 

In [10]: parser().print_help() 
usage: ipython3 [-h] [-i PATH] [-m [FILE [FILE ...]]] [-o PATH] 

optional arguments: 
    -h, --help   show this help message and exit 
    -i PATH, --input_file_path PATH 
         input file 
    -m [FILE [FILE ...]], --method_type [FILE [FILE ...]] 
         message 
    -o PATH, --output_file_path PATH 
         output file 

または長いオプション文字列

人々が持っている

usage: ipython3 [-h] [-i PATH] [-m [FILE [FILE ...]]] [-o PATH] 

optional arguments: 
    -h, --help   show this help message and exit 
    -i PATH, --input PATH 
         input file path 
    -m [FILE [FILE ...]], --method [FILE [FILE ...]] 
         message 
    -o PATH, --output PATH 
         output file path 
に短縮することによって:それはヘルプ表示を凝縮することができます python filename.py -i input.txt -m hello1,hello2 -o output.txt

+0

1つにつき1つの質問をしてください。 – jwodder

答えて

1

metavar LIKE「method_type」内のコンマの代わりにスペースを使用して分離することが可能です助けの表示について質問しました。ヘルプラインをさらに凝縮して

optional arguments: 
    -h, --help   show this help message and exit 
    -i, --input PATH 
         input file path 
    -m, --method [FILE [FILE ...]] 
         message 
    -o, --output PATH 
         output file path 

可能ですが、カスタムhelp formatterサブクラスが必要です(必要に応じてリンクが見つかります)。シェルはパーサに異なる入力(sys.argvリストを参照)を与える

python filename.py -i input.txt -m hello1,hello2 -o output.txt 

受け付けるよう


[...., '-m', 'hello1', 'hello2', '-o',...] 
[...., '-m', 'hello1,hello2', '-o',....] 

解析さargsは次になり

Namespace(method_type=['hello1', 'hello2'],....) 
Namespace(method_type=['hello1,hello2'],....) 

解析後に分割することができます:args.method_type[0].split(',')

解析中に分割すると、カスタムActionサブクラスが必要になります。

関連する問題