LoginSignup
24
14

More than 5 years have passed since last update.

Nimでのメイン処理とコマンドライン引数について

Last updated at Posted at 2016-12-04

概要

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
24
14
1

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
24
14