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

Problem

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

Solution

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

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

  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 であっても同様に行う ことができる.

For Ubuntu Ubuntu でコマンドラインから実行する場合のみ,以下の様に batchflow を 省略しても実行することができる.

$ ./foo.n 0.5 0.9
こうすると、foo.n の ARG1 に 0.5, ARG2 に 0.9 が渡されてネットワークが実行される.

For Windows Windows でコマンドラインから実行する場合のみ,以下の様に batchflowqtflow としても実行することができる.

$ 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

なし.