argparse比較分析を使用して、Pythonのパラメータ解析モジュールSYS、getoptの、

小扁は本日、Pythonの引数解析モジュールSYS、getoptは、argparse使用して、今非常に共有するすべての人のために、良いと内容が良い基準値、少しフォローして困っている友達を持っていることを小さなシリーズの比較分析についての記事を共有します見た目ED
大幅にスクリプトのコードのメンテナンスコストを簡素化することができますコマンドラインツールのいくつかは、再利用性を高めるために、いくつかの主流は今日主に研究と実践に、単純な関数を達成するためのPythonのパラメータ解析ツールによって提供されます主に、これは新しい年の最初の章が開始され、それは、書き込みや実験を完了するために多くの努力をした必要性、新しい年のヘルプの友人に期待して、私はすべての願いが叶うあなたを望みます!

まあ、ADOは、次のテキストを入力します。

Pythonの3は、内蔵モジュールのコマンドラインパラメータを処理するために:

まず:SYS、最も簡単には、単純なパラメータの解析を提供することができます

第二:少し良くパッケージSYS以外のgetopt、単純な処理コマンドラインパラメータ、

第三:argparse、それが簡単にユーザーフレンドリーなコマンドラインインタフェースを記述すること。それは、argparseより良い解決されますsys.argvのをプログラム処理のパラメータを定義する必要がありました。一方、argparseモジュールは自動的にユーザーが間違ったパラメータを入力するためのヒントや情報を生成することができます。

「 - 」と「 - 」コマンドラインパラメータにモデル、ならびに以下で特定の方法との類似点と相違点の使用私は主にコマンドラインパラメータモードの2種類を区別正しく行われ、実用化に紹介しますA。次のように次の練習、まずSYSモジュールは、例えば、プロセスパラメータ分析モジュールの練習を観察しました。

def sysFunc():
  '''
  基于 sys 模块的简单参数解析功能
  选项的写法要求:
  对于短格式:
        "-"号后面要紧跟一个选项字母,如果还有此选项的附加参数,可以用空格分开,也可以不分开。
        长度任意,可以用引号。
        如: -h  -ls -l s  等等
  对于长格式:
       "--"号后面要跟一个单词,如果还有些选项的附加参数,后面要紧跟"=",再加上参数。
       "="号前后不能有空格。
       如: --input=data.txt
  长格式是在Linux下引入的,许多Linux程序都支持这两种格式。在Python中提供了getopt模块很好
  的实现了对着两种用法的支持,而且使用简单。
  执行示例:
       python demo.py -d data.txt
       python demo.py --data=data.txt
  '''
  if len(sys.argv)==1: 
    print 'Nothing need to be done!'
    sys.exit()
  else:
    para_list=sys.argv
    print 'Parameters is: ',para_list
    if para_list[1].startswith('--'):
      print 'DataFile name is: ',para_list[1].split('=')[-1].strip()
      print 'Longopts,do your actions here!!!'
    elif para_list[1].startswith('-'):
      print 'DataFile name is: ',para_list[2]
      print 'Shortopts,do your actions here!!!'

そして、私は上記のコードで説明しているモジュールの使用上の注意事項が明確スニペット、私は私が実行例を添付した、理解しやすいと信じて、その結果、上記のコードの実装を見てみましょうは次の通りされています。
ここに画像を挿入説明
次は、我々はgetoptのモジュールを使用しますコマンドラインパラメータ解析操作、コード、我々は2つのIPを使用して、ポートがパラメータとして渡される属性が、次の練習:
DEF getoptFunc():
「」 '
達成するためのモジュールの解析に基づくgetoptのパラメータ
関数のgetoptを(引数、 shortopts、longoptsの= [])
引数パラメータは、一般的にsys.argvの[1:]
shortoptsショートフォーム( - )
ロングフォーマットをlongoptsの- )
注意点:
定義コマンドラインパラメータは、と定義する' - 'パラメータオプションを- 「」パラメータの再定義なし
:実行例を

     python demo.py -i 172.19.7.217 -p 8066 data.txt 88
      python demo.py --ip=172.19.7.217 --port=8066 data.txt 88
  '''
  if len(sys.argv)==1:
    print 'Nothing need to be done!'
    sys.exit()
  try:
    opts,args=getopt.getopt(sys.argv[1:],"hp:i:",["help","ip=","port="]) #过滤掉脚本名称
    '''
    opts是个包含元祖的列表,args是个列表,包含那些没有‘-'或‘--'的参数
    短格式 --- h 后面没有冒号:表示后面不带参数,p:和 i:后面有冒号表示后面需要参数
    长格式 --- help后面没有等号=,表示后面不带参数,其他三个有=,表示后面需要参数
    '''
    print 'opts: ',opts
    print 'args: ',args
  except getopt.GetoptError:
    print "argv error,please input"
    sys.exit()
  #打印具体参数
  map_dict={'-i':'IP','--ip':'IP','-p':'Port','--port':'Port'}
  for name,value in opts:
    if name in ("-h","--help"):
      print  """
          Usage:sys.args[0] [option]
          -h or --help:显示帮助信息
          -p or --ip: IP地址
          -p or --port: IP端口
          """
    if name in ('-i','--ip','-p','--port'):
      print '{0} is=======>{1}'.format(map_dict[name],value)

getoptのモジュールは、大きく3つのステップに分け、コマンドラインパラメータを解析して使用します。

1.インポートのgetopt、SYSモジュール
コマンドラインパラメータの2分析
3.処理結果は
同様に、我々は、詳細な説明及び注釈モジュールヘルプ機構を理解加え、我々は、得られた上記のコードを実行した結果を、関連する実行例を添付しました以下のように:
ここに画像を挿入説明
最後に、我々はモジュールをargparseを実践、最初の二つのモジュールに対するモジュールは、パッケージには、より高度な学位は、より便利で、特定の慣行は、以下のようにしているものを使用することです。

def argparseFunc():
  '''
  基于argparse模块实现高级的参数解析功能
  执行示例:
       python demo.py -i 172.19.7.236 -p 7077 -f -w
       python demo.py -i 172.19.7.236 -p 7077 -f -r
  '''
  parser=argparse.ArgumentParser(description="show example") #使用argparse的构造函数来创建对象
  parser.add_argument("-i","--ip",help="IP Address") #添加可解析的参数
  parser.add_argument("-p","--port",help="IP Port") #添加可解析的参数
  parser.add_argument("-f","--flag",help="Flag",action="store_true") #action=store_true的意义是如果使用了这个参数则值默认为TRUE
  exptypegroup=parser.add_mutually_exclusive_group() #添加一组互斥的选项,如上例中的-l和-r只能用一个
  exptypegroup.add_argument("-r","--read",help="Read Action",action="store_true")
  exptypegroup.add_argument("-w","--write",help="Write Action",action="store_true")
  ARGS=parser.parse_args()
  print 'ARGS:',ARGS
  if ARGS.ip:
    print "IP is: "+ARGS.ip
  if ARGS.port:
    print "Port is: "+ARGS.port
  if ARGS.flag:
    print "Flag is: "+str(ARGS.flag)
  if ARGS.read:
    print "Read action is: "+str(ARGS.read)
  if ARGS.write:
    print "Write action is: "+str(ARGS.write)

913066266、高齢者が学んでいる方法を見て:私たちは、Pythonのバックルqunを学ぶお勧めします!基本的なWeb開発Pythonスクリプトからなど、爬虫類、ジャンゴ、データマイニング、へ[PDF、実際のソースコード]、ゼロベースのプロジェクトの戦闘データに仕上げています。どんな小さなPythonのパートナーに与えられました!毎日、ダニエルは学び、細部に注意を払う必要性に、クリックにご参加くださいする方法のいくつかを共有するために、タイミングPythonの技術を説明する学習者集会のPython

このモジュールを使用して、より広くモジュールを作成するために、最初のコンストラクタを使用するワークがArgumentParserに基づいて行われるような導入とその後のパラメータを指定として、ArgumentParserオブジェクト提供するオブジェクト、これは、パラメータオブジェクトを追加するadd_argumentオプション、add_mutually_exclusive_group例えば、追加する相互に排他的なオプション:上記読み出しおよび書き込み動作は、我々はまだ二つのパラメータIP及びポートオプション、以下の結果に基づいて同じ実験例所与上記のコード実行に排他的ですショーは:ここに画像を挿入説明
私たちは、文は本当に良いオプションは相互に排他的なパラメータが同時にそれを使用することはできませんされているかどうかを知りたいですか?ここではライン上のそれの単純な実装があります:ここに画像を挿入説明
私たちは、通常の仕事と宣言の上、我々はargparseフィードバックモジュールは、読み取りと書き込みの両方の操作を使用することが許可されていない私たちに与えました上記のエラーメッセージから、相互に排他的な引数を説明しました。

三つのモジュール、実際のパラメータの3種類のみで、その予備的理解の目的を達成することを決議し、効果が良くなると信じて一定の理解や知識の後に特定のプロジェクトに戻したいことができます。

まとめ
この記事のためにすべてです、私はこの記事の内容は、いくつかの参照を学ぶために皆のための学習の価値や仕事を持っている願っています

公開された47元の記事 ウォン称賛53 ビュー50000 +

おすすめ

転載: blog.csdn.net/haoxun03/article/details/104270163