Problem
FlowDesigner は GUI 上でネットワークを構築し, その場で実行できるが, 処理の度に GUI を起動し実行ボタンを押すのは面倒くさい. そこで,ネットワークファイルをコマンドラインから実行したい.その時, ネットワークのパラメータをコマンドライン引数から変更したい.
Solution
コマンドラインから引数を与えて処理を行うためには,対象となるパラメータ とコマンドライン引数の対応をネットワークファイル内のノードに設定する必要がある.
まずFlowDesigner を開き,ネットワークファイルを次のように編集する
MAIN サブネットワークで,引数を渡したい変数を含むノードのプロパティ を開く.
引数が代入される変数の 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 であっても同様に行う ことができる.
For Ubuntu Ubuntu でコマンドラインから実行する場合のみ,以下の様に batchflow を 省略しても実行することができる.
$ ./foo.n 0.5 0.9こうすると、foo.n の ARG1 に 0.5, ARG2 に 0.9 が渡されてネットワークが実行される.
For Windows Windows でコマンドラインから実行する場合のみ,以下の様に batchflow を qtflow としても実行することができる.
$ qtflow foo.n 0.5 0.9こうすると、foo.n の ARG1 に 0.5, ARG2 に 0.9 が渡されてネットワークが実行される.
Discussion
FlowDesigner はネットワークファイルを編集するGUIであり, 実際にネットワークファイルを実行するのは Ubuntu では batchflow であり,Windows では qtflow である. ただし,Windows で batchflow とコマンドを打っても実際に内部では qtflow が実行される.そのため,どちらの OS でも同じ方法で実行することができる.
コマンドライン引数は,すべて string 型と解釈される. int 型や float 型で渡したい時には,Value に “int :ARG1”, ”float :ARG1” のように指定する. 現在のバージョン (Version 1.2) では,オブジェクト,たとえば Vector<int> などの Object 型には この方法では渡すことはできない.
See Also
なし.