623

argparse pythonモジュールドキュメントは、確かに優れていますが、私の小さな初心者の頭脳が今理解するには多すぎます。コマンドラインで計算したり、画面の書式設定行をいじったり、オプション文字を変更したりする必要はありません。私がやりたいのは、「argがAの場合、これを実行し、Bがそれを実行し、上記のいずれもヘルプを表示せずに終了する場合」です。

4

16 に答える 16

425

これが私がargparse(複数の引数で)それを行う方法です:

parser = argparse.ArgumentParser(description='Description of your program')
parser.add_argument('-f','--foo', help='Description for foo argument', required=True)
parser.add_argument('-b','--bar', help='Description for bar argument', required=True)
args = vars(parser.parse_args())

args引数を含む辞書になります:

if args['foo'] == 'Hello':
    # code here

if args['bar'] == 'World':
    # code here

あなたの場合、引数を1つだけ追加してください。

于 2011-09-15T07:39:48.637 に答える
292

元の質問に対する私の理解は2つあります。まず、可能な限り単純なargparseの例に関して、私はここでそれを見たことがないことに驚いています。もちろん、非常に単純であるために、それはほとんど電力がないすべてのオーバーヘッドでもありますが、それはあなたが始めるかもしれません。

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("a")
args = parser.parse_args()

if args.a == 'magic.name':
    print 'You nailed it!'

しかし、この位置論は今や必要です。このプログラムを呼び出すときに省略した場合、引数が欠落しているというエラーが発生します。これは、元の質問の2番目の部分につながります。Matt Wilkieは、名前付きラベル(--optionラベル)のない単一のオプション引数を必要としているようです。私の提案は、上記のコードを次のように変更することです。

...
parser.add_argument("a", nargs='?', default="check_string_for_empty")
...
if args.a == 'check_string_for_empty':
    print 'I can tell that no argument was given and I can deal with that here.'
elif args.a == 'magic.name':
    print 'You nailed it!'
else:
    print args.a

よりエレガントな解決策があるかもしれませんが、これは機能し、最小限です。

于 2014-02-26T15:31:21.683 に答える
230

ドキュメントはかなり良いですが、argparse明白ではないかもしれないいくつかの有用な詳細を省略しています。(@Diego Navarroはすでにこのいくつかについて言及していますが、彼の答えを少し拡張してみます。)基本的な使用法は次のとおりです。

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--my-foo', default='foobar')
parser.add_argument('-b', '--bar-value', default=3.14)
args = parser.parse_args()

返されるオブジェクトparse_args()は「名前空間」オブジェクトです。コマンドライン引数にちなんでメンバー変数に名前が付けられているオブジェクトです。Namespaceオブジェクトは、引数とそれに関連付けられた値にアクセスする方法です。

args = parser.parse_args()
print (args.my_foo)
print (args.bar_value)

argparse(変数に名前を付けるときは、引数名の「-」をアンダースコアに置き換えることに注意してください。)

多くの場合、引数を値をとらないフラグとして使用することをお勧めします。次のようにargparseに追加できます。

parser.add_argument('--foo', action='store_true')
parser.add_argument('--no-foo', action='store_false')

上記は、値がTrueの「foo」という名前の変数と値がFalseの「no_foo」という名前の変数をそれぞれ作成します。

if (args.foo):
    print ("foo is true")

if (args.no_foo is False):
    print ("nofoo is false")

引数を追加するときに「必須」オプションを使用できることにも注意してください。

parser.add_argument('-o', '--output', required=True)

そうすれば、コマンドラインでこの引数を省略すると、引数がargparse欠落していることがわかり、スクリプトの実行が停止します。

最後に、関数を使用して引数のdict構造を作成することが可能であることに注意してくださいvars。そうすることで、作業が楽になります。

args = parser.parse_args()
argsdict = vars(args)
print (argsdict['my_foo'])
print (argsdict['bar_value'])

ご覧のとおりvars、引数名をキーとして、その値をer、valuesとしてdictを返します。

他にもたくさんのオプションやできることがありますが、これは最も重要で一般的な使用シナリオをカバーするはずです。

于 2011-12-13T17:58:08.047 に答える
65

Mattはargparseの位置パラメーターについて質問していますが、Pythonのドキュメントにはこの点が欠けていることに同意します。〜20の奇数ページには、位置パラメータの解析と使用の両方を示す単一の完全な例はありません。

ここにある他の回答はいずれも、位置パラメータの完全な例を示していないため、完全な例を次に示します。

# tested with python 2.7.1
import argparse

parser = argparse.ArgumentParser(description="An argparse example")

parser.add_argument('action', help='The action to take (e.g. install, remove, etc.)')
parser.add_argument('foo-bar', help='Hyphens are cumbersome in positional arguments')

args = parser.parse_args()

if args.action == "install":
    print("You asked for installation")
else:
    print("You asked for something other than installation")

# The following do not work:
# print(args.foo-bar)
# print(args.foo_bar)

# But this works:
print(getattr(args, 'foo-bar'))

私を驚かせたのは、argparseが名前付き引数「--foo-bar」を「foo_bar」に変換することですが、「foo-bar」という名前の位置パラメーターは「foo-bar」のままであるため、プログラムで使用してください。

私の例の終わり近くにある2行に注意してください。どちらも、foo-barの位置パラメータの値を取得するためには機能しません。最初のものは明らかに間違っています(算術式args.fooマイナスバーです)が、2番目のものも機能しません:

AttributeError: 'Namespace' object has no attribute 'foo_bar'

foo-barこの属性を使用する場合getattrは、私の例の最後の行にあるように、を使用する必要があります。クレイジーなのはdest=foo_bar、プロパティ名をアクセスしやすい名前に変更しようとすると、非常に奇妙なエラーメッセージが表示されることです。

ValueError: dest supplied twice for positional argument

上記の例の実行方法は次のとおりです。

$ python test.py
usage: test.py [-h] action foo-bar
test.py: error: too few arguments

$ python test.py -h
usage: test.py [-h] action foo-bar

An argparse example

positional arguments:
  action      The action to take (e.g. install, remove, etc.)
  foo-bar     Hyphens are cumbersome in positional arguments

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

$ python test.py install foo
You asked for installation
foo
于 2012-04-29T17:48:21.290 に答える
28

この投稿に触発されたさらに別の要約の紹介。

import argparse

# define functions, classes, etc.

# executes when your script is called from the command-line
if __name__ == "__main__":

    parser = argparse.ArgumentParser()
    #
    # define each option with: parser.add_argument
    #
    args = parser.parse_args() # automatically looks at sys.argv
    #
    # access results with: args.argumentName
    #

引数は、次の組み合わせで定義されます。

parser.add_argument( 'name', options... )              # positional argument
parser.add_argument( '-x', options... )                # single-char flag
parser.add_argument( '-x', '--long-name', options... ) # flag with long name

一般的なオプションは次のとおりです。

  • ヘルプ:使用される場合のこの引数の説明--help
  • default:argが省略された場合のデフォルト値。
  • 次のように入力します:またはを期待するfloat場合int(それ以外の場合はstr)。
  • dest:フラグに別の名前を付けます(例'-x', '--long-name', dest='longName')。
    注:デフォルト--long-nameでは、args.long_name
  • アクション:特定の引数の特別な処理用
    • store_true, store_falseブール引数の場合
      '--foo', action='store_true' => args.foo == True
    • store_constオプションで使用するconst
      '--foo', action='store_const', const=42 => args.foo == 42
    • count繰り返しオプションの場合./myscript.py -vv
      '-v', action='count' => args.v == 2
    • append繰り返しオプションの場合./myscript.py --foo 1 --foo 2
      '--foo', action='append' => args.foo == ['1', '2']
  • required:フラグが必要な場合、または位置引数が必要ない場合。
  • nargs:N個の引数をキャプチャするフラグの場合
    ./myscript.py --foo a b => args.foo = ['a', 'b']
  • 選択肢:可能な入力を制限します(文字列のリスト、または場合はintとして指定しますtype=int)。
于 2018-03-12T14:43:21.007 に答える
13

PythonHOWTOのArgparseチュートリアルに注意してください。これは、次のような最も基本的な例から始まります。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
args = parser.parse_args()
print(args.square**2)

そして、より基本的でないものに進みます。

質問内容のように、オプションの選択肢が事前定義されている例があります。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", type=int,
                    help="display a square of a given number")
parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
                    help="increase output verbosity")
args = parser.parse_args()
answer = args.square**2
if args.verbosity == 2:
    print("the square of {} equals {}".format(args.square, answer))
elif args.verbosity == 1:
    print("{}^2 == {}".format(args.square, answer))
else:
    print(answer)
于 2016-03-13T12:27:06.800 に答える
13

これが、主に@DMHのおかげで私の学習プロジェクトで思いついたものです...

デモコード:

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-f', '--flag', action='store_true', default=False)  # can 'store_false' for no-xxx flags
    parser.add_argument('-r', '--reqd', required=True)
    parser.add_argument('-o', '--opt', default='fallback')
    parser.add_argument('arg', nargs='*') # use '+' for 1 or more args (instead of 0 or more)
    parsed = parser.parse_args()
    # NOTE: args with '-' have it replaced with '_'
    print('Result:',  vars(parsed))
    print('parsed.reqd:', parsed.reqd)

if __name__ == "__main__":
    main()

これは進化した可能性があり、オンラインで入手できます:command-line.py

このコードにワークアウトを与えるスクリプト:command-line-demo.sh

于 2016-06-18T08:55:38.463 に答える
9

コードファイル:argparseDemo.py

単純:一般的なケース

  • name(abbr、full)、助けを借りて
    import argparse
    
    argParser = argparse.ArgumentParser()
    argParser.add_argument("-n", "--name", help="your name")
    
    args = argParser.parse_args()
    print("args=%s" % args)
    
    print("args.name=%s" % args.name)
    
    • 電話
      • python argparseDemo.py -n Crifan
      • python argparseDemo.py --name Crifan
    • 出力:args=Namespace(name='Crifan')およびargs.name=Crifan
  • タイプ
    argParser.add_argument("-a", "--age", type=int, help="your current age")
    print("type(args.age)=%s" % type(args.age))
    
    • 電話:python argparseDemo.py --age 30
    • 出力:type(args.age)=<class 'int'>およびargs.age=30
  • 必要
    argParser.add_argument("-a", "--age", required=True, type=int, help="your current age")
    
    • 電話:python argparseDemo.py
    • 出力:エラーargparseDemo.py: error: the following arguments are required: -a/--age
  • デフォルト
    argParser.add_argument("-a", "--age", type=int, default=20, help="your current age. Default is 20")
    
    • 電話:python argparseDemo.py
    • 出力:args.age=20
  • 選択肢
    argParser.add_argument("-f", "--love-fruit", choices=['apple', 'orange', 'banana'], help="your love fruits")
    
    • 電話:python argparseDemo.py -f apple
    • 出力:args=Namespace(love_fruit='apple')およびargs.love_fruit=apple
  • マルチ引数
    argParser.add_argument("-f", "--love-fruit", nargs=2, help="your love fruits")
    
    • 電話:python argparseDemo.py -f apple orange
    • 出力:args.love_fruit=['apple', 'orange']

詳細

最も簡単:-x

  • コード:

    import argparse
    
    argParser = argparse.ArgumentParser()
    argParser.add_argument("-a") # most simple -> got args.a, type is `str`
    args = argParser.parse_args()
    
    print("args.a=%s" % args.a)
    
  • 使用法=コマンドラインで実行

    python argparseDemo.py -a 30
    
    • また:./argparseDemo.py -a 30
      • makeureargparseDemo.pyは実行可能です
        • そうでない場合は、追加します。chmod +x argparseDemo.py
  • 出力

    args.a=30
    
  • ノート

    • デフォルトのタイプはstr
      • argParser.add_argument("-a")==argParser.add_argument("-a", type=str)
      • print("type(args.a)=%s" % type(args.a))->type(args.a)=<class 'str'>
    • argsタイプはNamespace
      • print("type(args)=%s" % type(args))->type(args)=<class 'argparse.Namespace'>
    • args値はNamespace(a='30')
      • print("args=%s" % args)->args=Namespace(a='30')
      • 電話/使用できるようにargs.a

パラメータ名

完全なパラメータ名:--xxx

  • コード
    argParser.add_argument("-a", "--age")
    
  • 利用方法
    • python argparseDemo.py -a 30
      • また:python argparseDemo.py --age 30
  • 解析された値を取得します:args.age
    • 注:NOT args.a、およびNOT args.a

複数の単語を含む完全なパラメータ名:--xxx-yyy

  • コード
    argParser.add_argument("-a", "--current-age")
    
  • 解析された値を取得します:args。現在の年齢

ヘルプの説明を追加:help

  • コード
    argParser.add_argument("-a", help="your age") # with help
    
  • 出力
    • 使用--helpは説明を見ることができます
       python argparseDemo.py --help
      usage: argparseDemo.py [-h] [-a A]
      
      optional arguments:
      -h, --help  show this help message and exit
      -a A        your age
      

パラメータタイプを指定します。type

  • コード
    argParser.add_argument("-a", type=int) # parsed arg is `int`, not default `str`
    
  • 出力
    • print("type(args.a)=%s" % type(args.a))->type(args.a)=<class 'int'>
    • print("args=%s" % args)->args=Namespace(a=30)

デフォルト値を追加します。default

  • コード
    argParser.add_argument("-a", type=int, default=20) # if not pass a, a use default value: 20
    
  • 効果
    • 利用方法:python argparseDemo.py
    • 出力:print("args.age=%s" % args.age)->args=Namespace(a=20)
于 2021-05-09T07:32:32.263 に答える
5

plac(ラッパーアラウンド)を使用することもできますargparse

ボーナスとして、それはきちんとしたヘルプ命令を生成します-以下を参照してください。

スクリプト例:

#!/usr/bin/env python3
def main(
    arg: ('Argument with two possible values', 'positional', None, None, ['A', 'B'])
):
    """General help for application"""
    if arg == 'A':
        print("Argument has value A")
    elif arg == 'B':
        print("Argument has value B")

if __name__ == '__main__':
    import plac
    plac.call(main)

出力例:

引数が提供されていません- example.py

usage: example.py [-h] {A,B}
example.py: error: the following arguments are required: arg

予期しない引数が指定されました- example.py C

usage: example.py [-h] {A,B}
example.py: error: argument arg: invalid choice: 'C' (choose from 'A', 'B')

正しい引数が提供されました- example.py A

Argument has value A

フルヘルプメニュー(自動的に生成)- example.py -h

usage: example.py [-h] {A,B}

General help for application

positional arguments:
  {A,B}       Argument with two possible values

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

簡単な説明:

引数の名前は通常、パラメーター名(arg)と同じです。

パラメーターの後のタプル注釈にargは、次の意味があります。

  • 説明(Argument with two possible values
  • 引数のタイプ-「フラグ」、「オプション」、または「位置」のいずれか(positional
  • 略語(None
  • 引数値のタイプ-例:フロート、文字列(None
  • 制限された選択肢のセット(['A', 'B']

ドキュメンテーション:

placの使用の詳細については、その優れたドキュメントを確認してください。

Plac:コマンドラインを簡単に解析する

于 2016-10-08T15:18:13.573 に答える
4

他の人が述べたことに追加するには:

私は通常、「dest」パラメーターを使用して変数名を指定してから、「globals()。update()」を使用してそれらの変数をグローバル名前空間に配置するのが好きです。

使用法:

$ python script.py -i "Hello, World!"

コード:

...
parser.add_argument('-i', '--input', ..., dest='inputted_variable',...)
globals().update(vars(parser.parse_args()))
...
print(inputted_variable) # Prints "Hello, World!"
于 2013-12-12T13:47:22.693 に答える
3

私はすべての例と答えを調べましたが、何らかの形で彼らは私のニーズに対応していませんでした。それで、私はもっと助けが必要なシナリオを彼女にリストします、そしてこれがアイデアをもっと説明できることを願っています。

初期の問題

それを処理するファイルを取得するツールを開発する必要があり、ツールを構成するために使用するオプションの構成ファイルが必要です。

だから私が必要なのは次のようなものです

mytool.py file.text -config config-file.json

ソリューション

これがソリューションコードです

import argparse

def main():
    parser = argparse.ArgumentParser(description='This example for a tool to process a file and configure the tool using a config file.')
    parser.add_argument('filename', help="Input file either text, image or video")
    # parser.add_argument('config_file', help="a JSON file to load the initial configuration ")
    # parser.add_argument('-c', '--config_file', help="a JSON file to load the initial configuration ", default='configFile.json', required=False)
    parser.add_argument('-c', '--config', default='configFile.json', dest='config_file', help="a JSON file to load the initial configuration " )
    parser.add_argument('-d', '--debug', action="store_true", help="Enable the debug mode for logging debug statements." )

    args = parser.parse_args()
    
    filename = args.filename
    configfile = args.config_file

    print("The file to be processed is", filename)
    print("The config file is", configfile)

    if args.debug:
        print("Debug mode enabled")
    else:
        print("Debug mode disabled")

    print("and all arguments are: ", args)

if __name__ == '__main__':
    main()

アイデアを示すために、複数の拡張機能でソリューションを示します

最初のラウンド:引数を一覧表示します

すべての入力を必須入力としてリストし、2番目の引数が

parser.add_argument('config_file', help="a JSON file to load the initial configuration ")

このツールのヘルプコマンドを取得すると、次の結果が得られます。

(base) > python .\argparser_example.py -h
usage: argparser_example.py [-h] filename config_file

This example for a tool to process a file and configure the tool using a config file.

positional arguments:
  filename     Input file either text, image or video
  config_file  a JSON file to load the initial configuration

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

そして私がそれを次のように実行すると

(base) > python .\argparser_example.py filename.txt configfile.json

結果は

The file to be processed is filename.txt
The config file is configfile.json
and all arguments are:  Namespace(config_file='configfile.json', filename='filename.txt')

しかし、設定ファイルはオプションである必要があります、私はそれを引数から削除しました

(base) > python .\argparser_example.py filename.txt

結果は次のようになります。

usage: argparser_example.py [-h] filename config_file
argparser_example.py: error: the following arguments are required: c

これは、ツールに問題があることを意味します

第2ラウンド:最適化する

それで、それをオプションにするために、私はプログラムを次のように変更しました

    parser.add_argument('-c', '--config', help="a JSON file to load the initial configuration ", default='configFile.json', required=False)

ヘルプの結果は

usage: argparser_example.py [-h] [-c CONFIG] filename

This example for a tool to process a file and configure the tool using a config file.

positional arguments:
  filename              Input file either text, image or video

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        a JSON file to load the initial configuration

だから私がプログラムを実行するとき

(base) > python .\argparser_example.py filename.txt

結果は

The file to be processed is filename.txt
The config file is configFile.json
and all arguments are:  Namespace(config_file='configFile.json', filename='filename.txt')

のような引数で

(base) > python .\argparser_example.py filename.txt --config_file anotherConfig.json

結果は次のようになります

The file to be processed is filename.txt
The config file is anotherConfig.json
and all arguments are:  Namespace(config_file='anotherConfig.json', filename='filename.txt')

ラウンド3:機能強化

変数名をそのままにしてフラグ名をから--config_fileに 変更するには、次のよう--configにコードを変更します。dest='config_file'

parser.add_argument('-c', '--config', help="a JSON file to load the initial configuration ", default='configFile.json', dest='config_file')

コマンドは次のようになります

(base) > python .\argparser_example.py filename.txt --config anotherConfig.json

デバッグモードフラグのサポートを追加するには、ブール値のデバッグフラグをサポートするフラグを引数に追加する必要があります。それを実装するために、私は以下を追加しました:

    parser.add_argument('-d', '--debug', action="store_true", help="Enable the debug mode for logging debug statements." )

ツールコマンドは次のようになります。

(carnd-term1-38) > python .\argparser_example.py image.jpg -c imageConfig,json --debug

結果は

The file to be processed is image.jpg
The config file is imageConfig,json
Debug mode enabled
and all arguments are:  Namespace(config_file='imageConfig,json', debug=True, filename='image.jpg')
于 2020-10-02T15:30:45.643 に答える
2

これは初めてですが、PythonとPowershellを組み合わせ、このテンプレートを使用して、詳細で優れたPythonコマンドライン引数–実際のPythonに触発されています

内でできることはたくさんありますinit_argparse()。ここでは、最も単純なシナリオについて説明します。

  1. import argparse
  2. パターンを使用if __name__ == "__main__": main()して端末から実行する
  3. main()すべてのパラメータを持たない関数内の引数を解析します
  4. init_argparse()関数 を定義する
    • を呼び出してパーサーオブジェクトを作成しますargparse.ArgumentParser()
    • 1つ以上の引数を宣言するparser.add_argument("--<long_param_name>")
    • returパーサー
  5. argsを呼び出してオブジェクトを作成することにより、引数を解析しますparser.parse_args()
  6. param1、、param2..で適切な関数を定義します。
  7. オブジェクト function_properの属性として割り当てられているパラメータを使用して呼び出しますargs
    • 例: `function_proper(param1 = args.param1、param2 = args.param2)
  8. シェル内で、名前付き引数を使用してモジュールを呼び出します。
    • 例えばpython foobar.py --param1="foo" --param2=="bar"
#file: foobar.py
import argparse

def function_proper(param1, param2):
    #CODE...

def init_argparse() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser()
    parser.add_argument("--param1")
    parser.add_argument("--param2")
    return parser


def main() -> None:
    parser = init_argparse()
    args = parser.parse_args()
    function_proper(param1=args.param1, param2=args.param2)


if __name__ == "__main__":
    main()
>>> python .\foobar.py --param1="foo" --param2=="bar"
于 2021-07-07T10:24:55.073 に答える
1

argparseを使用し、「-h」/「-help」スイッチを修正して独自の個人コードのヘルプ命令を表示する非常に簡単な方法は、デフォルトのヘルプをFalseに設定することです。また、必要な数の.add_argumentsを追加することもできます。 :

import argparse

parser = argparse.ArgumentParser(add_help=False)

parser.add_argument('-h', '--help', action='help',
                help='To run this script please provide two arguments')
parser.parse_args()

実行:python test.py -h

出力:

usage: test.py [-h]

optional arguments:
  -h, --help  To run this script please provide two arguments
于 2019-08-08T11:04:39.953 に答える
0

引数「A」と「B」が定位置であるかオプションであるかを明確にしていないので、両方を組み合わせます。

デフォルトでは、位置引数が必要です。与えない場合は、「与えられたいくつかの引数」がスローされます。これは、名前で指定されたオプションの引数には当てはまりません。このプログラムは、デフォルトで数値を取り、その正方形を返します。キューブオプションを使用すると、そのキューブを返します。

import argparse
parser = argparse.ArgumentParser('number-game')
parser.add_argument(
    "number",
    type=int,
    help="enter a number"
   )
parser.add_argument(
   "-c", "--choice",
   choices=['square','cube'],
   help="choose what you need to do with the number"
)

# all the results will be parsed by the parser and stored in args
args = parser.parse_args()

# if square is selected return the square, same for cube 
if args.c == 'square':
    print("{} is the result".format(args.number**2))
elif args.c == 'cube':
    print("{} is the result".format(args.number**3))
else:
    print("{} is not changed".format(args.number))

利用方法

$python3 script.py 4 -c square
16

ここでは、オプションの引数が価値を持っています。フラグのように使用したい場合は、それも可能です。したがって、正方形に-sを使用し、立方体に-cを使用して、action="store_true"を追加することで動作を変更します。使用時のみtrueに変更されます。

parser.add_argument(
    "-s", "--square",
    help="returns the square of number",
    action="store_true"
    )
parser.add_argument(
    "-c", "--cube",
    help="returns the cube of number",
    action="store_true"
    )

したがって、条件付きブロックを次のように変更できます。

if args.s:
    print("{} is the result".format(args.number**2))
elif args.c:
    print("{} is the result".format(args.number**3))
else:
    print("{} is not changed".format(args.number))

利用方法

$python3 script.py 4 -c
64
于 2020-07-25T07:29:02.127 に答える
0

既存の回答に加えて、十分に怠惰な場合は、protoargsと呼ばれるコード生成ツールを使用することができます。構成から引数パーサーを生成します。Pythonの場合、argparseを使用します。

オプションのAおよびBを使用した構成

syntax = "proto2";
message protoargs
{
    optional string A     = 1; // A param description
    optional string B     = 2; // B param description
}//protoargs

必要なAとBを使用した構成

syntax = "proto2";
message protoargs
{
    required string A     = 1; // A param description
    required string B     = 2; // B param description
}//protoargs

位置AおよびBの構成

syntax = "proto2";
message protoargs
{
    required string A     = 1; // A param description
    required string B     = 2; // B param description
}//protoargs
message protoargs_links
{
}//protoargs_links

今実行する必要があるのは次のとおりです。

python ./protoargs.py -i test.proto -o . --py

そしてそれを使用してください(ここで他の例を取ることが可能です):

import sys
import test_pa

class ArgsParser:
    program = "test"
    description = "Simple A and B parser test."

    def parse(self, argv):
        self.config = test_pa.parse(self.program, self.description, argv)

    def usage(self):
        return test_pa.usage(self.program, self.description)

if __name__ == "__main__":
    parser = ArgsParser()

    if len(sys.argv) == 1:
        print(parser.usage())
    else:
        parser.parse(sys.argv[1:])

        if parser.config.A:
            print(parser.config.A)

        if parser.config.B:
            print(parser.config.B)

さらに必要な場合は、構成を変更し、パーサーを再生成し、更新されたparser.configを使用します。

UPD:ルールで述べたように、これは私自身のプロジェクトであることを指定する必要があります

于 2021-10-12T16:24:18.980 に答える
-1

最も簡単な答え!

PSargparseのドキュメントを書いた人は愚かです

Pythonコード:

import argparse
parser = argparse.ArgumentParser(description='')
parser.add_argument('--o_dct_fname',type=str)
parser.add_argument('--tp',type=str)
parser.add_argument('--new_res_set',type=int)
args = parser.parse_args()
o_dct_fname = args.o_dct_fname
tp = args.tp
new_res_set = args.new_res_set

実行中のコード

python produce_result.py --o_dct_fname o_dct --tp father_child --new_res_set 1
于 2020-04-29T13:09:53.130 に答える