标签: getopt-long

反正有没有说服python的getopt来处理选项的可选参数?

根据python的文档getopt(我认为),选项字段应该表现为getopt()函数.但是我似乎无法为我的代码启用可选参数:

#!/usr/bin/python
import sys,getopt

if __name__ == "__main__":
    try:
        opts, args = getopt.gnu_getopt(sys.argv[1:], "v::", ["verbose="])
    except getopt.GetoptError, err:
        print str(err)
        sys.exit(1)

    for o,a in opts:
        if o in ("-v", "--verbose"):
            if a:
                verbose=int(a)
            else:
                verbose=1
            print "verbosity is %d" % (verbose)
Run Code Online (Sandbox Code Playgroud)

结果是:

$ ./testopt.py -v
option -v requires argument
$ ./testopt.py -v 1
verbosity is 1
Run Code Online (Sandbox Code Playgroud)

python getopt getopt-long

6
推荐指数
2
解决办法
1万
查看次数

为什么我的Perl程序在参数的值为0时打印帮助消息?

如果我这样做:

GetOptions(
    'u=s'    => \$in_username,
    'r=i'   => \$in_readonly,
    'b=i' => \$in_backup
    );

exit usage() unless $in_username && $in_readonly && $in_backup;
Run Code Online (Sandbox Code Playgroud)

并调用这样的程序:

./app.pl -u david -r 12 -b 0
Run Code Online (Sandbox Code Playgroud)

它总是导致调用usage(),所以显然0不被视为整数值.我能做什么接受整数值AND 0?

parameters perl integer zero getopt-long

6
推荐指数
1
解决办法
326
查看次数

关闭 getopt_long (getopt.h) 中的缩写?

是否可以关闭缩写getopt_long()?从手册页:

如果缩写是唯一的或者与某些定义的选项完全匹配,则可以缩写长选项名称。

我想这样做是因为我收到的一段代码的规范要求标志的全长精确匹配,并且有很多标志。

unix linux getopt getopt-long

6
推荐指数
1
解决办法
988
查看次数

无法解析命令行长选项

#!/usr/bin/perl -sw
use strict;
use warnings;
use Getopt::Long;

my $remote = 0;
my $test = 0;
GetOptions ('remote' => \$remote, 'test' => \$test);
print "$remote:$test\n";
Run Code Online (Sandbox Code Playgroud)

perl test.pl --remote --test

以上打印"0:0".我是Perl的新手,所以我无法确定为什么这不起作用.

我还运行了http://perldoc.perl.org/Getopt/Long.html#Simple-options中的"简单选项"部分,但也没有产生任何内容.

perl getopt-long command-line-arguments

6
推荐指数
1
解决办法
1028
查看次数

为什么struct option array在使用getopt_long时需要一个addtional dummy条目

例如,选项数组是:

static struct option const long_options[] =
{
  {"help", no_argument, 0, 'h'},
  {"version", no_argument, 0, 'v'},
  {0, 0, 0, 0}
};
Run Code Online (Sandbox Code Playgroud)

是填充吗?

c getopt-long option

5
推荐指数
1
解决办法
1240
查看次数

在C中使用getopt_long()的强制选项

使用C/C++,getopt_long()可用于解析命令行参数.是否有可能告诉函数某些选项是强制性的?例如,getopt_long如果startServer在不提及下面的端口的情况下调用,我怎么能告诉解析应该给出错误?

./startServer -port 80

注意:我不是说选项参数是强制性的,而是选项本身.

c getopt-long

5
推荐指数
1
解决办法
2501
查看次数

如何在选项的子中访问Getopt :: Long选项的值?

我的目标是有一个--override=f选项来操纵其他两个选项的值.诀窍是解决如何参考选项的值(匹配部分f=f的标志符)sub的是执行的时候GetOptions检测在命令行上的选项的存在.

我是这样做的:

$ cat t.pl
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
our %Opt = (
    a   => 0,
    b   => 0,
);
our %Options = (
    "a=f"       => \$Opt{a},
    "b=f"       => \$Opt{b},
    "override=f"    => sub { $Opt{$_} = $_[1] for qw(a b); },  # $_[1] is the "trick"
);
GetOptions(%Options) or die "whatever";
print "\$Opt{$_}='$Opt{$_}'\n" for keys %Opt;

$ t.pl --override=5
$Opt{a}='5'
$Opt{b}='5'

$ t.pl --a=1 --b=2 --override=5 --a=3
$Opt{a}='3'
$Opt{b}='5' …
Run Code Online (Sandbox Code Playgroud)

perl getopt-long

5
推荐指数
1
解决办法
579
查看次数

使用Perl的Getopt :: Long,如何防止模块尝试匹配不明确的选项名称?

我正在使用该Getopt::Long模块来处理命令行参数.

这个模块的典型行为是我们可以传递-f而不是变量的全名--file.同时,如果我有另一个命令行变量--find,并且如果我只-f在命令提示符下提供,它将返回错误:

Option f is ambiguous (file, find).
Run Code Online (Sandbox Code Playgroud)

我想知道我们怎样才能抑制这种模棱两可的用法呢?

提前致谢.

perl getopt-long

5
推荐指数
1
解决办法
1491
查看次数

为什么gdb一直将optarg显示为0x0

我正在学习如何使用getopt和*getopt_long*.一个问题是,当我使用gdb逐步运行以下简单程序时,optarg始终为0x0.
你知道为什么吗?这是gdb的问题吗?
我试图搜索网络并查看程序的汇编代码,但尚未找到答案.
调试代码表明optarg按预期指向agv [3](值"16").

#include <unistd.h>
#include <getopt.h>
#include <stdio.h>
static struct option options[] =
{
  /* name     has_arg flag  val */
  { "num",  1, NULL, 'n' },
  { NULL ,  0, NULL , 0  }
};

int main(int argc, char** argv)
{
  int option;
  option = getopt_long( argc, argv, "n:", options, NULL );
  if (option == 'n') {
    printf("%s\n", optarg);
    if (optarg == NULL)
      printf("optarg == NULL\n");
    if (optarg == …
Run Code Online (Sandbox Code Playgroud)

c gdb getopt getopt-long

5
推荐指数
1
解决办法
455
查看次数

如何在C++中使用getopt严格执行选项检查?

我使用getopt来解析用C++编写的CLI的输入.我有long和short选项,我的struct long_options []元素看起来像这样:

{"verbose", no_argument, NULL, "v"}
Run Code Online (Sandbox Code Playgroud)

一个观察是 - 在命令行上,即使我通过了

# mycommand --verb
Run Code Online (Sandbox Code Playgroud)

它仍然接受并路由到处理详细行为的函数.有没有办法让getopt做一个严格的选项检查?它不应该接受--verb as --verbose对吗?

c++ getopt command-line-interface getopt-long

5
推荐指数
1
解决办法
144
查看次数