LoginSignup
2
2

More than 3 years have passed since last update.

pythonメモ - getoptでオプション指定

Last updated at Posted at 2020-05-06

はじめに

CLIでpythonプログラムを実行するときに引数指定をするならgetoptを使うので
基本的な動きを色々と試してみた。

基本的な使い方

参考URL:https://szarny.hatenablog.com/entry/2017/08/17/231356

書式
import getopt
opts,args = getopt.getopt(text, shortopts, longopts=[])
import getopt
opts,args = getopt.getopt(
    sys.args[1:],
    "hle:t:cp:,
    ["help", "listen", "execute=","target=","command","port=" )
引数 説明
opts 引数を解析した対象。shortopts, longoptsに合致する対象がリスト形式でセットされる
args 引数を解析した対象。shortopts, longoptsに合致しない対象がリスト形式でセットされる
text 引数を解析する対象。プロンプトから与える引数であればsys.args[1:]でOK
shortopts 略記でのオプション指定。引数が必要なオプションはコロンを付ける。例でいうと、h,l,cは引数不要でe,t,pは引数必要なオプション
longopts 詳記でのオプション指定。リスト形式で指定する。引数が必要なオプションはイコール(=)を付ける。例でいうと、execute, target, portが引数必要

なお、shortoptsとlongoptsはそれぞれ対応するのでそこんところ気を付けたらよいです。

実装例

色々試したので余計なコードも混ざってますが…

show_arg.py
import sys
import getopt

def main():
    if not len(sys.argv[1:]):
        print("argument is nothing")
        sys.exit()

    text = sys.argv[1:]

    try:
        opts,args = getopt.getopt(
            text,
            "t:p:m:h",
            ["target=", "port=", "message=", "hogehoge"]
            )
        print("Options:", opts)
        print("Arguments:", args)
    except getopt.GetoptError as err:
        print(str(err))

main()
print("finished")

実行結果はコチラ。略記指定ならハイフンひとつ。詳記指定ならハイフンふたつ。
一回目はshortopts、longoptsを試してみた結果(argsに入りそうな結果は出ないパターン)
二回目はargsに値が入ってくるように引数をセットしてみた結果

実行結果
$ python show_arg.py -t 127.0.0.1 -p 8888 --message hello --hogehoge
('Options:', [('-t', '127.0.0.1'), ('-p', '8888'), ('--message', 'hello'), ('--hogehoge', '')])
('Arguments:', [])
finished
$ python show_arg.py -t 127.0.0.1 -p 8888 --message hello --hogehoge hoge hage hige
('Options:', [('-t', '127.0.0.1'), ('-p', '8888'), ('--message', 'hello'), ('--hogehoge', '')])
('Arguments:', ['hoge', 'hage', 'hige'])
finished
$ 

おわりに

getops、sys.argvとセットで使えるようにしとくと超便利でした。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2