0

私はC++でプログラムを書いています。これは、最初にいくつかのセットアップコードを含み、最後にanalisysコードを含むいくつかのベンチマークのラッパーです。

最大2つのベンチマークを並行して実行したいと思います。これらの元のコマンドラインは次のとおりです。

/path0/benchmark0 -switch0 -switch1 -switch2
/path1/benchmark1 -arg0 -arg1 -arg2 -arg4

そして、これらをラッパーのコマンドラインに配置したいと思います。

wrapper -setup_arg0 -setup_arg1 -analysis_arg0 --command0 /path0/benchmark0 -switch0 -switch1 -switch2 --command1 /path1/benchmark1 -arg0 -arg1 -arg2 -arg4

元のコマンドラインを含む、とstd::vector<std::string>のそれぞれに1つずつ、合計2つのを取得したい場合。これは私がそれをしている方法です(を使用して):command0command1boost::program_options

("command0", po::value<std::vector< std::string> >(&command0)->multitoken(), "command line for thread 0")
("command1", po::value<std::vector< std::string> >(&command1)->multitoken(), "command line for thread 1")

これは基本的に機能します。-ただし、ベンチマークの引数が(私が見たほとんどのプログラムのほとんどのスイッチのように)で始まる場合、またはprogram_optionsの下にグループ化する必要があることを認識していないため、ラッパーのスイッチの一部としてそれらを解析しようとします。command0command1

program_optionsそれをサポートしていますか?もしそうなら、どのように?


例:

私が働いているところでは、次のようにマルチトークンを「終了」することによってこれを行うための規則があります。

wrapper <snip> --command0 /path0/benchmark0 -switch0 -switch1 -switch2 -command0- 

(この例では、で終了--command0しまし-command0-た。)

どうすればprogram_optionsこのように処理できますか?

4

1 に答える 1

1

command0command1の値を 1 つの文字列として取得するのが最適だと思います。例えば、

wrapper --command0 "/path0/benchmark0 ..." --command1 "/path1/benchmark1 ..."

はい、wordexpそれぞれのコマンド文字列を処理する必要があるという点で、さらに多くの作業があります (これらの文字列をシェルに直接渡している場合を除きます ;-))。コマンド。

于 2012-04-19T11:59:26.877 に答える