Python3-python-command-line-arguments

提供:Dev Guides
移動先:案内検索

Python 3-コマンドライン引数

Pythonは、コマンドラインオプションと引数の解析に役立つ getopt モジュールを提供します。

$ python test.py arg1 arg2 arg3

Python sys モジュールは、 sys.argv を介してコマンドライン引数へのアクセスを提供します。 これは2つの目的に役立ちます-

  • sys.argv はコマンドライン引数のリストです。
  • * len(sys.argv)*は、コマンドライン引数の数です。

ここで、sys.argv [0]はプログラムieです。 スクリプト名。

次のスクリプト test.py を検討してください-

#!/usr/bin/python3

import sys

print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))

次のように上記のスクリプトを実行します-

$ python test.py arg1 arg2 arg3

これは、次の結果を生成します-

Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3']

-上記のように、最初の引数は常にスクリプト名であり、引数の数にもカウントされます。

コマンドライン引数の解析

Pythonは、コマンドラインオプションと引数の解析に役立つ getopt モジュールを提供しました。 このモジュールは、コマンドライン引数の解析を有効にする2つの関数と例外を提供します。

getopt.getoptメソッド

このメソッドは、コマンドラインオプションとパラメーターリストを解析します。 以下は、このメソッドの簡単な構文です-

getopt.getopt(args, options, [long_options])

ここにパラメータの詳細があります-

  • args -これは解析される引数リストです。
  • options -これは、スクリプトが認識したいオプション文字の文字列であり、引数を必要とするオプションの後にコロン(:)が続く必要があります。
  • long_options -これはオプションのパラメータであり、指定する場合は、サポートする必要がある長いオプションの名前を含む文字列のリストである必要があります。 引数を必要とする長いオプションには、等号( '=')が必要です。 長いオプションのみを受け入れるには、オプションは空の文字列でなければなりません。
  • このメソッドは、2つの要素で構成される値を返します。1つ目は*(option、value)*ペアのリスト、2つ目はオプションリストが削除された後に残ったプログラム引数のリストです。
  • 返される各オプションと値のペアには、最初の要素としてオプションがあり、短いオプションの場合はハイフン(例: '-x')または長いオプションの場合は2つのハイフン(例: '--long-option')が先頭に付きます。

例外getopt.GetoptError

これは、引数リストに認識されないオプションが見つかった場合、または引数を必要とするオプションに何も指定されていない場合に発生します。

例外の引数は、エラーの原因を示す文字列です。 属性 msg および opt は、エラーメッセージと関連オプションを提供します。

コマンドラインを介して2つのファイル名を渡し、スクリプトの使用状況をチェックするオプションも指定するとします。 スクリプトの使用法は次のとおりです-

usage: test.py -i <inputfile> -o <outputfile>

test.pyの次のスクリプトを次に示します-

#!/usr/bin/python3

import sys, getopt

def main(argv):
   inputfile = ''
   outputfile = ''
   try:
      opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="])
   except getopt.GetoptError:
      print ('test.py -i <inputfile> -o <outputfile>')
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h':
         print ('test.py -i <inputfile> -o <outputfile>')
         sys.exit()
      elif opt in ("-i", "--ifile"):
         inputfile = arg
      elif opt in ("-o", "--ofile"):
         outputfile = arg
   print ('Input file is "', inputfile)
   print ('Output file is "', outputfile)

if __name__ == "__main__":
   main(sys.argv[1:])

出力

今、次のように上記のスクリプトを実行します-

$ test.py -h
usage: test.py -i <inputfile> -o <outputfile>

$ test.py -i BMP -o
usage: test.py -i <inputfile> -o <outputfile>

$ test.py -i inputfile -o outputfile
Input file is " inputfile
Output file is " outputfile