Khepera III 工具箱/工具箱/模块/命令行
外观
commandline 模块解析命令行值并提供一个简单的界面来访问这些值。该模块期望命令行参数由以下组成:
- 具有一个值的选项(键值对),例如:-s 10000或--speed 10000
- 没有值的选项(只有键),例如:-h或--help
- 一个参数列表,包含所有没有键提供的值
例如,命令行:
./my_program --white-floor --speed 15000 10 12 10
将导致一个键(--white-floor),一个键值对(--speed 15000)和三个参数(10, 12, 10).
// Initialize the module
commandline_init();
// Register an option without value (by default, options are considered key-value pairs)
struct sCommandLineOption *option_white_floor = commandline_option_register("-wf", "--white-floor", cCommandLine_Option);
// Parse the command line
commandline_parse(int argc, char *argv[]);
// Check if the -h --help option was provided
if (commandline_option_provided("-h", "--help")) {
...
}
// Read the -s --speed option
int value = commandline_option_value_int("-s", "--speed", int defaultvalue);
float value = commandline_option_value_float("-s", "--speed", float defaultvalue);
const char *value = commandline_option_value("-s", "--speed", const char *defaultvalue);
// Obtain the number of arguments provided
int count = commandline_argument_count();
// Read argument (the index counter starts with 0)
int value = commandline_argument_int(int index, int defaultvalue);
float value = commandline_argument_float(int index, float defaultvalue);
const char *value = commandline_argument(int index, const char *defaultvalue);
// The following two lines are equivalent, as the option "--white-floor" was registered above
white_floor = option_white_floor->provided;
white_floor = commandline_option_provided("-wf", "--white-floor");
commandline_register_option 注册具有特定类型的选项。默认情况下(对于所有未明确注册的选项),选项类型为cCommandLine_Option_Value并且会“吃掉”下一个命令行参数。例如,命令行
./my_program --white-floor 15
默认情况下会被解析为一个键值对(--white-floor 15)。如果--white-floor被注册为cCommandLine_Option,但是,同一行将被解析为一个选项(--white-floor)和一个参数(15).
一旦所有必要的选项都被注册,commandline_parse 就可以被调用来解析命令行。随后,函数 commandline_option_value 及其 _int 和 _float 版本可用于访问选项值,而 commandline_option_provided 返回该选项是否出现在命令行中。要访问参数,可以使用 commandline_argument 及其 _int 和 _float 版本。index 必须小于 commandline_argument_count 返回的数字。
或者,程序可以在选项中注册一个钩子
// The function to process the --white-floor argument.
void white_floor_hook(struct sCommandLineOption *option) {
char *value = option->value;
}
int main(int argc, char *argv[]) {
...
commandline_init();
...
// Register a hook for --white-floor
commandline_option_register_hook("-wf", "--white-floor", cCommandLine_Option_Value, white_floor_hook);
...
commandline_parse(argc, argv);
...
}
每次相应选项出现在命令行中时,钩子函数都会被调用。请注意,如果用户多次提供同一个选项,该函数将被调用多次。