ぺんぎんさんのおうち

日記です。たまに日記じゃないこともあります。

Python getoptを使う

便利なやつがあった.

要はコマンドに与えるオプション引数みたいな感じでPythonが実行できる.

 

python hoge.py -b hoge -y piyo

 こんな感じで使える.

ライブラリ使わずにごり押してもできそうだけどスマートじゃないので素直に使っていこう.

基本的な使い方(僕が使う方法)だけなので, 詳しい情報が知りたい人はリファレンス読んでね.

16.5. getopt — C 言語スタイルのコマンドラインオプションパーサ — Python 3.6.1 ドキュメント

いつも思うけどPythonは公式ドキュメントが優秀すぎるのでほとんど困らない.

 

テンプレートみたいなやつをペイ(後で詳しく書きます)

try:

     opts, args = getopt.getopt(sys.argv[1:], "hoge", ["help", "output", "go", "endroll"])

except getopt.GetoptError as err: なんか適当に例外処理

 

実行結果とか貼ろうと思ったけど面倒になったので各自で試して🙇

 

getopt.getoptの解説

第一引数にはオプション引数のリストを渡します. 

sys.argv[1:]になってるのは, argv[0]がファイル名を指すからですね.

必要ないものは省きましょう (この説明いる?)

たとえば

python opt.py -h -o -g -e 

 とすると sys.argv[1:] は ['-h', '-o'. '-g', '-e'] になります.

ターミナルから実行する事がほとんどだと思うので, 第一引数にはこれを書いておくと良いです.

 

続いて第二引数.

ここには "-" と併せてオプション指定したい文字を書きます.

上の例だと "hoge"なので, -h -o -g -e が使えます.

もしここで指定していない文字を与えるとエラー出してくれます. ( -p -i とか)

 

python opt.py -h hoge -e end

オプションと, それに付随する引数を与えたいときは

"h:oge:" と その文字の次にコロン(:) 書いときます.

 

 

最後に第三引数.

第二引数の場合とほとんど同じで, "--"と併せる文字列をリスト形式で与えます.

引数与えたいときは その文字列の最後に "=" つけます.

最初の例で示せばよかった

 

 

getopt.getopt("省略", "f:", ["file="])

だと

python opt.py -f filename

python opt.py --file filename

みたいな書き方ができるわけです. 

 

問題はここからで, オプション引数を受け取った後の処理を書かないといけませんね.

 

それほど難しいものでもないのでパパッと書きます.

for o, a in opts:

    if o in ("-h", "--help"): pass

    elif o in ("-o", "--output"): pass

    else: assert False, "unhandled option"

o とか a ってなんだよって思った人は(いないと思うけど)実際に動かして確認してみてね. めんどくさくなった

 

 

まとめ

某を某しようとして見つけたものの, ちゃんと文章構成やら考えなかったのでめちゃくちゃになってしまった.

他にも便利なのがあった.

16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.1 ドキュメント