跳转到内容

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);
    ...
}

每次相应选项出现在命令行中时,钩子函数都会被调用。请注意,如果用户多次提供同一个选项,该函数将被调用多次。

华夏公益教科书