【发布时间】:2020-07-31 13:21:34
【问题描述】:
我想我正在设法安排事情,以便getopt_long 跳过争论。
我编写了一个共享库/dll,并从 C 或 lua 脚本中使用它。解析 CLI 的代码位在共享库/dll 中,它在 C 中(见下文)我可以从 C 中的共享库/dll 文件中访问 argc 和 argv。
当我启动我的程序时,它可以是:
$ my_c_app --buddy moe --buddy larry --buddy curly
$ interpreter my_script.scr --buddy moe --buddy larry --buddy curly
当我从 my_c_app 解析时,一切正常。但是当我从 lua 脚本中传入 argc 和 argv 时,事情就出错了。
我认为它被绊倒了,因为整个事情都是从lua my_script.lua 开始的。我认为这需要跳过那部分(又名,将这两个术语视为启动程序的名称)
解析代码如下:
static struct option long_options[] = {
{"buddy", required_argument, NULL, 'b'},
{"version", optional_argument, NULL, 'v'},
{NULL, 0, NULL, 0}
};
void parse_cli(int argc, char *const *argv)
{
char ch;
// show me what you see
for (int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
print("--------\n");
while ((ch = getopt_long(argc, argv, "p:v:", long_options, NULL)) != -1) {
switch (ch) {
case 'b':
printf("buddy %s\n", optarg);
break;
case 'v':
printf("version 1.0\n");
default:
break;
}
}
}
这是你看到的:
有效
$ my_c_app --buddy moe --buddy larry --buddy curly
my_c_app
--buddy
moe
--buddy
larry
--buddy
curly
--------
moe
larry
curly
失败
interpreter
my_script.scr
--buddy
moe
--buddy
larry
--buddy
curly
--------
(null)
(null)
(null)
注意事项:
- 我尝试将
optind设置为不同的值,不。 - 我的翻译真的是lua。
- 我不认为这是 lua 的事情。也可以是
python my_script.py
【问题讨论】:
标签: c getopt getopt-long