Python 3コマンドライン引数

Pythonは、コマンドライン引数を取得するために、getoptモジュールを提供します。

$ python test.py arg1 arg2 arg3

Pythonでは、sysのsys.argvを使用してコマンドライン引数を取得することもできます。

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

注:sys.argv[0] はスクリプト名を表します。

実例

#!/usr/bin/python3
import sys
print ('引数の数は:', len(sys.argv), '個引数。')
print ('引数リスト:',str(sys.argv))
print ('スクリプト名:',str(sys.argv[0]))

上記のコードを実行すると、出力結果は次のようになります。

$ python3 test.py arg1 arg2 arg3
引数の数は:4個引数。
引数リスト:['test.py', 'arg1', 'arg2', 'arg3']
スクリプト名:test.py

getoptモジュール

getoptモジュールは、コマンドライン引数の処理に特化したモジュールであり、コマンドラインオプションと引数、つまりsys.argvを取得するために使用されます。 コマンドラインオプションにより、プログラムの引数がより柔軟になります。 ショートオプションモード-およびロングオプションモード-をサポートします。

このモジュールは、コマンドラインパラメータを解析するための2つのメソッドと例外処理を提供しています。

getopt.getoptメソッド

getopt.getoptメソッドは、コマンドライン引数リストを解析するために使用されます。構文は次のとおりです。

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

メソッド引数の説明

  • args:解析するコマンドライン引数のリスト。
  • options:文字列の形式で定義され、optionsの後のコロン「:」はオプションに追加の引数が必要であることを示し、コロンがない場合は、オプションに追加の引数がないことを示します。
  • long_options:リストの形式で定義されます。long_optionsの後に等号「=」は、このオプションが設定する場合は追加の引き数が必要であることを意味し、そうでない場合は追加の引数はありません。

このメソッドの戻り値は、2つの要素で構成されています。1つ目は、(option,、value)グループのリストです。 2つ目は、 – または–のないものを含む引数の引数リストです。

次に、site()関数を定義し、コマンドラインから省略形nとuを使用してサイト名name とURLを入力します。

実例

import sys
import getopt
def site():
name = None
url = None
argv = sys.argv[1:]
try:
opts, args = getopt.getopt(argv, "n:u:") #ショートオプションモード
except:
print("Error")
for opt, arg in opts:
if opt in ['-n']:
name = arg
elif opt in ['-u']:
url = arg
print( name +" " + url)
site()

上記のコードをテストするには、コマンドラインに次のように入力します。

python3 test.py -n CEODATA -u www.ceodata.com

出力は次のとおりです。

CEODATA www.ceodata.com

次の例は、ロングオプションモードの使用方法を示します。

実例

import sys 
import getopt 
def site(): 
    name = None
    url = None
    argv = sys.argv[1:] 
    try: 
        opts, args = getopt.getopt(argv, "n:u:",  
                                   ["name=", 
                                    "url="])  #ロングオプションモード      
    except: 
        print("Error") 
    for opt, arg in opts: 
        if opt in ['-n', '--name']: 
            name = arg 
        elif opt in ['-u', '--url']: 
            url = arg 
    print( name + " " + url) 
site() 

上記のコードをテストするには、コマンドラインに次のように入力します。

python3 test.py -n CEODATA -u www.ceodata.com

出力は次のとおりです。

CEODATA www.ceodata.com

もう1つのメソッドはgetopt.gnu_getoptです。これはめったに使用されないため、ここでは紹介しません。

Exception 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 ('入力ファイルは:', inputfile)
   print ('出力ファイルは:', outputfile)
if __name__ == "__main__":
   main(sys.argv[1:])

上記のコードを実行すると、出力結果は次のようになります。

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

$ python3 test.py -i inputfile -o outputfile

入力ファイルは: inputfile
出力ファイルは: outputfile
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です