概要
nimの勉強がてら簡易なコマンドを作ろうとしたときに調べたことを書いていきます。
- メイン処理の判断(Pythonの
__name__=='__main__'
) - コマンドライン引数
- プログラムの戻り値
- コマンドライン引数パーサーを利用
サンプルアプリ1
メイン関数の判定を行い、引数、戻り値を設定するサンプルコードです。
isMainModuleという変数で、そのモジュールがメインとして起動しているかどうかを判断します。
main1.nim
# 通常のコマンドラインアプリサンプル その1
import system
import os
# メインモジュールとして起動しているかチェック
if isMainModule :
# 終了コードは、system.programResult に設定する
if paramCount() == 0 :
system.programResult = 1
else :
# パラメータの取得
echo "パラメータの数 =" $os.paramCount()
echo "コマンドラインパラメータ = " $os.commandLineParams()
echo "1個目のパラメータ = " $os.commandLineParams()[0]
system.programResult = 0
# 引数ありで実行
$ main1 1 2 3
パラメータの数 =3
コマンドラインパラメータ = @[1, 2, 3]
1個目のパラメータ = 1
# 引数なしで実行
$ main1
FAIL: 1
サンプルアプリ2
parseopt2というモジュールを使うと、コマンドラインオプションを自動的にパースして、扱いやすくしてくれます。
パースした結果をマップに入れて使うと便利そうです。
- -key
- -key:val or --key=val
- arg
main2.nim
# 通常のコマンドラインアプリサンプル その2
# コマンドラインパーサーモジュール
import parseopt2
# メインモジュールとして起動しているかチェック
if isMainModule :
# イテレータで取得
for kind, key, val in getopt() :
# (余談)kindは、enum型なので、case文ではすべてのenum値
# を網羅していないとコンパイルエラーとなります
case kind
of cmdArgument:
echo "引数 >" $key
of cmdLongOption, cmdShortOption:
echo "オプション > ",key,"=" ,val
of cmdEnd:
echo "終了"
#結果
/main2 -a -b:c --d --e:f --g=h i j k
オプション > a=
オプション > b=c
オプション > d=
オプション > e=f
オプション > g=h
引数 >i
引数 >j
引数 >k