1. ホーム
  2. パイソン

python3のargparseモジュールで説明します。

2022-02-27 15:31:30
<パス

Python 標準ライブラリ sys モジュール

sysモジュール

Pythonインタプリタに関する操作を提供します。

sys.argv #List of command-line arguments, the first element is the path to the program itself
sys.exit(n) #Exit the program, exit(0) on normal exit
sys.version # Get the version information of the Python interpreter
sys.maxint # the maximum Int value
sys.path # return the search path of the module, initialized with the value of the PYTHONPATH environment variable
sys.platform # return the OS platform name
sys.stdin # input related
sys.stdout #output-related
sys.stdror #Error related


pythonのコマンドライン引数(sys.argv)
  • あるタスクを処理するためにスクリプトを書く必要があるとき、しばしばコマンドライン引数を与える必要がありますが、その引数によって扱いが異なります。Pythonでは、コマンドライン引数はC言語と非常によく似ています(標準のPythonはC言語で実装されているため)。C言語ではmain関数のプロトタイプはint main(int argc, char ** argv)ですが、ここでは主にlinuxのプラットフォームを指し、argcはコマンドラインに渡す引数の数(プログラム名が第1引数)、argvはポインタの配列で、それぞれの要素がコマンドライン引数のポインタとなります。Pythonのコマンドライン引数はsys.argvに格納され、これは引数のリストであり、その最初の要素はプログラムの名前でもあります。
  #### sys.argv exercise
  import sys
  for i in sys.argv:
      print(i)

  #if __name__ == '__main__':
  # for item in sys.argv:
  # print item


argparseモジュール

役割です。 argparse はコマンドのオプションや引数を解析するための Python の組み込みモジュールです。プログラムの中で引数を定義することで、argparse は sys.argv からそれらを解析し、自動的にヘルプと使用情報を生成します。もちろん、Pythonにはもっと強力なコマンドラインパース用のサードパーティライブラリもあります。 docopt Click .

1. コマンドラインパラメータは、位置指定パラメータとオプションパラメータに分けられます。
  • 位置パラメーターは、パラメーターが現れる場所によってプログラムが決定するものです
    • 例: [root@openstack_1 /]# ls root/ #ここで、root/ はロケーションパラメーターです。
  • オプションパラメータとは、アプリケーションであらかじめ定義されたパラメータで、任意に指定できるものではありません
    • 例えば、 [root@openstack_1 /]# ls -l # -lは、lsコマンドのオプションパラメーターです。
2. 使用手順

(1) import argparse まず、モジュールをインポートします。
(2) parser = argparse.ArgumentParser() 構文解析オブジェクトを作成します.
(3) parser.add_argument() このオブジェクトに、注目したいコマンドライン引数やオプションを追加します。
(4) parser.parse_args() でパースする。

3. argparse.ArgumentParser() メソッドのパラメータ 注:一般的には、説明文のみを使用することを選択します。
  1. description - コマンドラインヘルプテキストの始まり、ほとんどの場合このパラメータのみを使用します。
  2. epilog - コマンドラインヘルプの終了テキストです。
  3. prog - (デフォルト: sys.argv[0]) プログラム名。通常は変更する必要はありません。
  4. prefix_chars - コマンドのプレフィックス、デフォルトは -、例:-f/-file。プログラムによっては /f のようなオプションをサポートしたい場合があるので、prefix_chars="/" を使用することができます。
  5. fromfile_prefix_chars - (デフォルト: なし) は、コマンドライン引数をファイルから読み込む場合に使用されることがあります。例えば、fromfile_prefix_chars='@' で、コマンドライン引数の1つが "@args.txt" の場合、args.txt の内容がコマンドライン引数として使用されます。
  6. add_help - -h/-help オプションを追加するかどうか (デフォルト: True)、通常ヘルプ情報は必要なので、設定しないでください。
  7. parent - タイプはリストです。このパーサーのオプションの一部が他のパーサーと同じである場合、parents を使って継承させることができます(例: parents=[parent_parser] )。
  8. 許容される値は3つです。# class argparse.RawDescriptionHelpFormatter 直接 説明文とエピログを生のまま出力します(自動改行や空白の除去はしません) # class argparse.RawTextHelpFormatter 直接 説明文とエピログと add_argument のヘルプ文字列の原形を出力します(自動改行や空白除去はしません) # class argparse デフォルト値、設定されていればその値。これが一番よく使われると思います!
  9. argument_default - (default: None) グローバルオプションのデフォルト値を設定します。通常、各オプションは個別に設定されるため、この引数はあまり使用されず、詳細も表示されません。
  10. usage - (default: generated) 使用情報を変更する必要がある場合はこれを修正します(使用法: PROG [-h] [-foo [FOO]] bar [bar ...] )が、通常は変更しないでください。
  11. conflict_handler - お勧めしません。これは極端な場合にのみ使用され、主に add_argument で追加された2つのオプションの名前が衝突した場合の処理を定義するために使用されます。デフォルトの処理は例外を投げることです。
4. add_argument()メソッドのパラメータに関する注意事項。
  1. name または flags - 引数の形式を指定します。いくつか書きますが、通常は短いものと長いものの2つを書きます。以下の "-f", "-file" の例を参照してください。
  2. 任意オプション、位置は固定しない、好きなだけ書く、デフォルトは任意 # parser.add_argument("-f", "-file", help= "test test")
  3. オプションの位置が固定されている場合、例えば "prog i_am_bar" では i_am_bar は bar オプションの値で、これはデフォルトで必要です # parser.add_argument("bar ", help="test test"。):Parcer.argument:post:post:bar"。
  4. nargs - この引数の後にいくつの値が続くかを指定します。例えば、-n 1 2 3 4 を使って n の値を [1, 2, 3, 4] に設定したいとします #parser. add_argument("-n", " -num", nargs="+", type=int) #ここで nargs="+" は-nオプションを指定すると、-nに続いて少なくとも一つの引数がなければならない、+は少なくとも一つの、?は一つまたは0、0またはそれ以上を意味します .
  5. default - このオプションがコマンドラインにない場合、defaultで指定されたデフォルト値を使用します #parser.add_argument("+g", "++gold", help= "test test",default="test_gold")# prefix_chars に "+" を含める必要があります ...
  6. type - 渡される引数に指定された型(float、int、文字列から変換できるファイルなど)を指定したい場合は、#parser.add_argument("-x", type=int)を使用することができます。
  7. choices - 引数の値の範囲を設定します。もし choices の型が文字列でない場合は、型を指定することを忘れないでください #parser.add_argument("-y", choices=['a ', 'b', 'd'])
  8. required - 通常 -f のようなオプションはオプションですが、required=True の場合は必須となります #parser.add_argument("-z", choices=['a ', 'b', 'd'], required=True)
  9. metavar - パラメータの名前。ヘルプメッセージを表示するときに使用されます。# parser.add_argument("-o", metavar="OOOOO")
  10. help - このオプションのヘルプメッセージを設定します。
  11. dest - このオプションの値を、パースされる属性に設定します #parser.add_argument("-q", dest="world")
  12. args = parser.parse_args(args) # args 引数がない場合は、コマンドラインの引数である sys.argv を使用します。この引数を使うと、デバッグがしやすくなります ah . # args.worldは-qの値です。
  13. action - コマンドラインでこの引数に遭遇したときに実行されるアクションの基本タイプ。
  14. const - いくつかのアクションとnargsの選択で必要とされる定数値。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo') # add_argument() specifies the command line options that the program can accept
args = parser.parse_args() # parse_args() returns some data from the specified options
print(args)
print(args.echo)

parser = argparse.ArgumentParser(description = 'this is a description')
parser.add_argument('--ver', '-v', action = 'store_true', help = 'hahaha')
# Store the variables in the args dictionary as a tag-value dictionary
args = parser.parse_args()
if args.ver:
    print("Ture")
else:
    print("False")

# The required tag means that the --ver argument is required and is of type int; entering any other type will result in an error
parser.add_argument('--ver', '-v', required = True, type = int)

parser.add_argument('file', choices = ['test1', 'test2'])
args = parser.parse_args()
print('read in %s'%(args.file))

# indicates that the script can read in two integers given to the num key (the value is then an array of 2 integers)
parser.add_argument('filename', nargs = 2, type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))


parser.add_argument('filename', nargs = '+', type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))


parser.add_argument('-file', choices = ['test1', 'test2'], dest = 'world')
args = parser.parse_args()
print('read in %s'%(args.world))


import sys
print "Input argument is %s" %(sys.argv)


import argparse

parser = argparse.ArgumentParser(description="your script description") # The description argument can be used to insert information describing the purpose of the script, and can be empty
parser.add_argument('--verbose', '-v', action='store_true', help='verbose mode') # Add --verbose tag, tag alias can be -v, action means when --verbose/-v appears in the read argument. verbose/-v
                                                                                   # The value corresponding to the verbose build of the parameter dictionary is True, and the help parameter is used to describe the use or meaning of the --verbose parameter.
args = parser.parse_args() # store the variables in the args dictionary as a label-value dictionary
if args.verbose:
    print "Verbose mode on!"
else:
    print "Verbose mode off!"


分析:nargsはまた、'*'は、もしあれば、その後のすべての入力がその位置引数の値として使われることを示し、'+'はその位置引数の少なくとも1つを読み取ることを示すことができる。?'は、位置引数が何もないか、1つだけであることを意味する。(追記: 正規表現記法の使用と同じです)。
例えば

$ python test.py --help
usage: test.py [-h] [--verbose]

your script description

optional arguments:
    -h, --help show this help message and exit
    --verbose, -v verbose mode  


dest - このオプションの値がパースされる先の属性を設定します。

parser.add_argument('--verbose', required=True, type=int)


追加

スクリプトが単純または一時的で、複数の複雑な引数オプションを持たない場合、sys.argvを使用してスクリプトの後に引数を順番に直接読み込むことができます(読み込む際のデフォルトは文字列形式です)。例えば、test.py という名前の次のようなスクリプトです。

parser.add_argument('filename') # The first argument entered is given to a key named filename
args = parser.parse_args()
print "Read in %s" %(args.filename)


シェルスクリプトでpythonを実行する test.py helpを入力すると、Input引数がhelpであるという結果が得られます。

  1. 一般的なフォーム
    しかし、ほとんどの場合、スクリプトは複数の引数を必要とし、それぞれ異なるタイプの用途を持つ可能性が高いので、引数のタイプと用途を示すタグを引数の前に付けると便利で、これはargparseモジュールで簡単に行うことができます。
    再び、test.pyというスクリプトを例にして説明します。
parser.add_argument('num', nargs=2, type=int)

python test.py の後に -verbose/-v を実行すると、前者が出力され、何もなければ後者が出力されます。もし、-verbose/-v 以外を入力すると、error: unrecognized arguments と表示されます。
少し説明すると、action引数はキーに値を与える方法を示し、ここではbool型になっています。'count'であれば、-verboseタグの出現回数をverboseの値として使用するということ、'append ' は付箋の出現毎に同じ配列に格納して、その後に値を割り当てるということです。(まあ、最後の二つは一般的に使用頻度が低いので、これ以上は言いません)。
追記:-helpタグはargparseモジュールを使用する際に自動的に作成されるので、一般的にヘルプメッセージを積極的に定義する必要はありません。

parser.add_argument('filename')
parser.add_argument('num', nargs='*)


  1. 必須パラメータ
    特定の必須パラメータが入力されていることを確認するためのモードです。
parser.add_argument('file', type=argparser.FileType('r')) # Read the file
args = parser.parse_args()
for line in args.file:
    print line.strip()


requiredタグは、-verbose引数が必須であり、型がintであることを意味します。

3)位置指定引数
位置引数は、引数が明示的な -xxx または -xxx タグを持たないという点で sys.argv 呼び出しに近いもので、呼び出しのプロパティは sys.argv と同じになります。

parser.add_argument('filename', default='text.txt')


Pythonと入力する test.py test.txtにReadを出力します。

さらに、nargs パラメータで位置引数の数をデフォルトで 1 に制限することができ、もちろん通常のタグ付き引数に使用することもできます。
parser.add_argument('filename', choices=['test1.txt', 'text2.txt']) スクリプトがnumキーに与えられた2つの整数を読み込むことができることを示す(値はその後2つの整数の配列となる)。nargsはまた、その位置引数の入力がある場合、その後のすべての入力がその位置引数の値として使われることを示す'*'もできる。'+'はこの位置パラメータの少なくとも1つが読まれることを示す。?'は、位置引数が1つもないか、1つだけであることを意味する。(追記: 正規表現記法の使用と同じです。) 例えば、次のように使用します。

store

そして、pythonを実行することができます。 test.py text.txt 1 2
タグがないため、positionパラメータを使用する場合はより注意が必要です。

4) 入力タイプ
前述したように、typeパラメータは入力パラメータの種類を指定するために使用することができる。また、typeはファイル操作の種類を示すために使うこともできるので、直接ファイルへの読み書きを行うこともできます。

store_const

5) 引数のデフォルト値
通常は、毎回変更する必要のないいくつかのパラメータを入力する必要がないように、デフォルトのパラメータが設定されていますが、これを利用することで実現できます。

store_ture/store_false

今回は、python text.py を直接実行して、ファイル名を入力せずに text.txt の Read を取得します。

6) パラメータ候補の選択
は、パラメータが受け入れることができる値は、値の候補の特定の番号から来ることができることを示し、これに加えて、パラメータができる選択肢と、エラーを報告します。例えば

append

アクションパラメータ
argparseには、引数が解析されたときに起動される6つのビルトインアクションがあります。

append_const パラメータ値を保存します。場合によっては、最初に別のデータ型に変換します。明示的にアクションが指定されていない場合は、そのアクションをデフォルトとします。

version パラメータ解析から得られる値ではなく、パラメータ仕様の一部として定義された値を格納します。これは、通常、非ブール値のコマンドラインマークアップを実装するために使用されます。

import argparse parser = argparse.ArgumentParser() parser.add_argument('-s', action='store', dest='simple_value', help='Store a simple value') parser.add_argument('-c', action='store_const', dest='constant_value', const='value-to-store', help='Store a constant value') parser.add_argument('-t', action='store_true', default=False, dest='boolean_switch', help='Set a switch to true') parser.add_argument('-f', action='store_false', default=False, dest='boolean_switch', help='Set a switch to false') parser.add_argument('-a', action='append', dest='collection', default=[], help='Add repeated values to a list') parser.add_argument('-A', action='append_const', dest='const_collection', const='value-1-to-append', default=[], help='Add different values to list') parser.add_argument('-B', action='append_const', dest='const_collection', const='value-2-to-append', help='Add different values to list') parser.add_argument('--version', action='version', version='%(prog)s 1.0') results = parser.parse_args() print 'simple_value =', results.simple_value print 'constant_value =', results.constant_value print 'boolean_switch =', results.boolean_switch print 'collection =', results.collection print 'const_collection =', results.const_collection $ python argparse_action.py -h usage: argparse_action.py [-h] [-s SIMPLE_VALUE] [-c] [-t] [-f] [-a COLLECTION] [-A] [-B] [--version] optional arguments: -h, --help show this help message and exit -s SIMPLE_VALUE Store a simple value -c Store a constant value -t Set a switch to true -f Set a switch to false -a COLLECTION Add repeated values to a list -A Add different values to list -B Add different values to list --version show program's version number and exit $ python argparse_action.py -s value simple_value = value constant_value = None boolean_switch = False collection = [] const_collection = [] $ python argparse_action.py -c simple_value = None constant_value = value-to-store boolean_switch = False collection = [] const_collection = [] $ python argparse_action.py -t simple_value = None constant_value = None boolean_switch = True collection = [] const_collection = [] $ python argparse_action.py -f simple_value = None constant_value = None boolean_switch = False collection = [] const_collection = [] $ python argparse_action.py -a one -a two -a three simple_value = None constant_value = None boolean_switch = False collection = ['one', 'two', 'three'] const_collection = [] $ python argparse_action.py -B -A simple_value = None constant_value = None boolean_switch = False collection = [] const_collection = ['value-2-to-append', 'value-1-to-append'] $ python argparse_action.py --version argparse_action.py 1.0 対応するブーリアン値を格納する。これら2つのアクションは、ブーリアン・スイッチを実装するために使用される。

append 値をリストに保存します。パラメータが繰り返される場合、複数の値が保存されます。

append_const パラメータ指定で定義された値をリストに保存します。

version プログラムのバージョン情報を表示し、終了する

import argparse

parser = argparse.ArgumentParser()

parser.add_argument('-s', action='store', dest='simple_value',
        help='Store a simple value')

parser.add_argument('-c', action='store_const', dest='constant_value',
        const='value-to-store',
        help='Store a constant value')

parser.add_argument('-t', action='store_true', default=False,
        dest='boolean_switch',
        help='Set a switch to true')
parser.add_argument('-f', action='store_false', default=False,
        dest='boolean_switch',
        help='Set a switch to false')

parser.add_argument('-a', action='append', dest='collection',
        default=[],
        help='Add repeated values to a list')

parser.add_argument('-A', action='append_const', dest='const_collection',
        const='value-1-to-append',
        default=[],
        help='Add different values to list')
parser.add_argument('-B', action='append_const', dest='const_collection',
        const='value-2-to-append',
        help='Add different values to list')

parser.add_argument('--version', action='version', version='%(prog)s 1.0')

results = parser.parse_args()
print 'simple_value =', results.simple_value
print 'constant_value =', results.constant_value
print 'boolean_switch =', results.boolean_switch
print 'collection =', results.collection
print 'const_collection =', results.const_collection



$ python argparse_action.py -h

usage: argparse_action.py [-h] [-s SIMPLE_VALUE] [-c] [-t] [-f]
                          [-a COLLECTION] [-A] [-B] [--version]

optional arguments:
  -h, --help show this help message and exit
  -s SIMPLE_VALUE Store a simple value
  -c Store a constant value
  -t Set a switch to true
  -f Set a switch to false
  -a COLLECTION Add repeated values to a list
  -A Add different values to list
  -B Add different values to list
  --version show program's version number and exit

$ python argparse_action.py -s value

simple_value = value
constant_value = None
boolean_switch = False
collection = []
const_collection = []

$ python argparse_action.py -c

simple_value = None
constant_value = value-to-store
boolean_switch = False
collection = []
const_collection = []

$ python argparse_action.py -t

simple_value = None
constant_value = None
boolean_switch = True
collection = []
const_collection = []

$ python argparse_action.py -f

simple_value = None
constant_value = None
boolean_switch = False
collection = []
const_collection = []

$ python argparse_action.py -a one -a two -a three

simple_value = None
constant_value = None
boolean_switch = False
collection = ['one', 'two', 'three']
const_collection = []

$ python argparse_action.py -B -A

simple_value = None
constant_value = None
boolean_switch = False
collection = []
const_collection = ['value-2-to-append', 'value-1-to-append']

$ python argparse_action.py --version

argparse_action.py 1.0




参考

  1. https://mkaz.tech/python-argparse-cookbook.html
  2. https://docs.python.org/2/howto/argparse.html