7.1 コマンドラインから引数を与えて起動したい。

Problem

HARK-Designer は GUI 上でネットワークを構築し, その場で実行できるが, 処理の度に GUI を起動し実行ボタンを押すのは面倒くさい. そこで,ネットワークファイルをコマンドラインから実行したい.その時, ネットワークのパラメータをコマンドライン引数から変更したい.

Solution

コマンドラインから引数を与えて処理を行うためには,対象となるパラメータ とコマンドライン引数の対応をネットワークファイル内のノードに設定する必要がある.

まず HARK-Designer を開き,ネットワークファイルを次のように編集する

  1. MAIN サブネットワークで,引数を渡したい変数を含むノードのプロパティ を開く.

  2. 引数が代入される変数の Type を subnet_param に, Value を “ARG?” と 入力する.なお,?には引数のインデックスが入る.この際,引数が整数もしくは 浮動小数点の場合には,型も含めて記述する.

例えば,一つ目のコマンドライン引数をあるパラメータに文字列として渡す場合は “ARG1” とし,二つ目のコマンドライン引数を別のパラメータに浮動小数点 として渡す場合は “float:ARG2” とする.

ただし,コマンドライン引数を与えられるのは MAIN サブネットワークのノード のみである.他のサブネットワークのパラメータを指定するときは, まずそのネットワークのパラメータを subnet_param に指定して MAIN サブネッ トワークから見えるようにし,MAINで指定する必要がある.

ネットワークファイルの内容を読み込んで実行するのは batchflow であるので, ネットワークファイル名の前に実行するアプリケーションの名前である batchflow を 指定しなければならない.

$ batchflow foo.n 0.5 0.9

こうすると,foo.n の ARG1 に 0.5, ARG2 に 0.9 が渡されてネットワー クが実行される.この方法は Windows であっても Ubuntu であっても同様に行う ことができる.

Discussion

HARK-Designer はネットワークファイルを編集するGUIであり, 実際にネットワークファイルを実行するのは batchflow である.

コマンドライン引数は,すべて string 型と解釈される. int 型や float 型で渡したい時には,Value に “int :ARG1”, ”float :ARG1” のように指定する. 現在のバージョンでは,オブジェクト,たとえば Vector<int> などの Object 型には この方法では渡すことはできない.

See Also

なし.