热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

v3AppOptionsnolongerworkonsubcommandarguments

Makesureyoucompletedthefollowingtasks[x]Searchedthediscus


Make sure you completed the following tasks


  • [x] Searched the discussions

  • [x] Searched the closes issues

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
rust

use clap::{App, Arg, AppSettings};



fn main() {

    let cli = App::new("foo")

        .setting(AppSettings::SubcommandRequired)

        .arg(Arg::with_name("v")

                .short('v')

                .multiple(true)

                .about("Sets the level of verbosity"))

        .subcommand(App::new("bar")

                .arg(Arg::with_name("baz")

                        .long("baz")

                    )).get_matches();



    let log_level = cli.occurrences_of("v");

    println!("{}", log_level);

    if let Some(bar) = cli.subcommand_matches("bar") {

        if bar.is_present("baz") {

            println!("Hello World");

        }

    }

}


Steps to reproduce the issue


  1. Run
    1
    cargo run -- -v bar --baz

    error: Found argument '--baz' which wasn't expected, or isn't valid in this context


Version


  • Rust: rustc 1.44.0-nightly

  • Clap: master

Actual Behavior Summary


  1. Run
    1
    cargo run -- bar

    = 0 (expected)


  2. Run
    1
    cargo run -- bar --baz

    = 0 Hello World (expected)


  3. Run
    1
    cargo run -- -v bar

    = 1 (expected)


  4. Run
    1
    cargo run -- -v bar --baz

    error: Found argument '--baz' which wasn't expected, or isn't valid in this context


I'm using clap-rs in https://github.com/publicarray/BunnyCLI

Expected Behavior Summary

From run number 4 the output should be:

1
2
1

Hello World


Additional context


Debug output

Compile clap with

1
debug

feature:

1
2
3
toml

[dependencies]

clap = { version = "*", features = ["debug"] }

The output may be very long, so feel free to link to a gist or attach a text file

Debug Output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
     Running `target/debug/my-test -v bar --baz`

[            clap::build::app]  App::_do_parse

[            clap::build::app]  App::_build

[            clap::build::app]  App::_derive_display_order:foo

[            clap::build::app]  App::_derive_display_order:bar

[            clap::build::app]  App::_create_help_and_version

[            clap::build::app]  App::_create_help_and_version: Building --help

[            clap::build::app]  App::_create_help_and_version: Building --version

[            clap::build::app]  App::_create_help_and_version: Building help

[            clap::build::app]  App::_debug_asserts

[            clap::build::arg]  Arg::_debug_asserts:v

[            clap::build::arg]  Arg::_debug_asserts:help

[            clap::build::arg]  Arg::_debug_asserts:version

[         clap::parse::parser]  Parser::get_matches_with

[         clap::parse::parser]  Parser::_build

[         clap::parse::parser]  Parser::_verify_positionals

[         clap::parse::parser]  Parser::get_matches_with: Begin parsing '"-v"' ([45, 118])

[         clap::parse::parser]  Parser::is_new_arg: "-v":NotFound

[         clap::parse::parser]  Parser::is_new_arg: arg_allows_tac=false

[         clap::parse::parser]  Parser::is_new_arg: - found

[         clap::parse::parser]  Parser::is_new_arg: starts_new_arg=true

[         clap::parse::parser]  Parser::possible_subcommand: arg="-v"

[         clap::parse::parser]  Parser::get_matches_with: possible_sc=false, sc=None

[         clap::parse::parser]  Parser::parse_short_arg: full_arg="-v"

[         clap::parse::parser]  Parser::parse_short_arg:iter:v

[         clap::parse::parser]  Parser::parse_short_arg:iter:v: Found valid opt or flag

[          clap::util::argstr]  ArgSplit::next: self=ArgSplit { sep: [118, 0, 0, 0], sep_len: 1, val: [118], pos: 0 }

[         clap::parse::parser]  Parser::parse_short_arg:iter:v: i=1, arg_os="v"

[         clap::parse::parser]  Parser::parse_opt; opt=v, val=None

[         clap::parse::parser]  Parser::parse_opt; opt.settings=ArgFlags(MULTIPLE_OCC | TAKES_VAL | DELIM_NOT_SET | MULTIPLE_VALS)

[         clap::parse::parser]  Parser::parse_opt; Checking for val...

[         clap::parse::parser]  None

[    clap::parse::arg_matcher]  ArgMatcher::inc_occurrence_of: arg=v

[    clap::parse::arg_matcher]  ArgMatcher::inc_occurrence_of: first instance

[         clap::parse::parser]  groups_for_arg: name=v

[         clap::parse::parser]  Parser::parse_opt: More arg vals required...

[         clap::parse::parser]  Parser::get_matches_with: After parse_short_arg Opt(v)

[         clap::parse::parser]  Parser::maybe_inc_pos_counter: arg = v

[         clap::parse::parser]  Parser::maybe_inc_pos_counter: is it positional?

[         clap::parse::parser]  No

[         clap::parse::parser]  groups_for_arg: name=v

[         clap::parse::parser]  Parser::get_matches_with: Begin parsing '"bar"' ([98, 97, 114])

[         clap::parse::parser]  Parser::is_new_arg: "bar":Opt(v)

[         clap::parse::parser]  Parser::is_new_arg: arg_allows_tac=false

[         clap::parse::parser]  Parser::is_new_arg: probably value

[         clap::parse::parser]  Parser::is_new_arg: starts_new_arg=false

[         clap::parse::parser]  Parser::add_val_to_arg; arg=v, val="bar"

[         clap::parse::parser]  Parser::add_val_to_arg; trailing_vals=false, DontDelimTrailingVals=false

[         clap::parse::parser]  Parser::add_single_val_to_arg: adding val..."bar"

[         clap::parse::parser]  groups_for_arg: name=v

[    clap::parse::arg_matcher]  ArgMatcher::needs_more_vals: o=v

[         clap::parse::parser]  Parser::get_matches_with: Begin parsing '"--baz"' ([45, 45, 98, 97, 122])

[         clap::parse::parser]  Parser::is_new_arg: "--baz":Opt(v)

[         clap::parse::parser]  Parser::is_new_arg: arg_allows_tac=false

[         clap::parse::parser]  Parser::is_new_arg: -- found

[         clap::parse::parser]  Parser::is_new_arg: starts_new_arg=true

[         clap::parse::parser]  Parser::parse_long_arg

[         clap::parse::parser]  Parser::parse_long_arg: Does it contain '='...

[         clap::parse::parser]  No

[         clap::parse::parser]  Parser::parse_long_arg: Didn't match anything

[         clap::parse::parser]  Parser::did_you_mean_error: arg=baz

[         clap::parse::parser]  Parser::did_you_mean_error: longs=["help", "version"]

[            clap::build::app]  App::_build

[            clap::build::app]  App::_derive_display_order:bar

[            clap::build::app]  App::_create_help_and_version

[            clap::build::app]  App::_create_help_and_version: Building --help

[            clap::build::app]  App::_create_help_and_version: Building --version

[            clap::build::app]  App::_debug_asserts

[            clap::build::arg]  Arg::_debug_asserts:baz

[            clap::build::arg]  Arg::_debug_asserts:help

[            clap::build::arg]  Arg::_debug_asserts:version

[         clap::output::usage]  Usage::create_usage_with_title

[         clap::output::usage]  Usage::create_usage_no_title

[         clap::output::usage]  Usage::create_smart_usage

[         clap::output::usage]  Usage::get_required_usage_from: incls=[v], matcher=false, incl_last=true

[         clap::output::usage]  Usage::get_required_usage_from:iter:v

[         clap::output::usage]  Usage::get_required_usage_from: ret_val=["-v ..."]

[            clap::build::app]  App::color: Color setting...

[            clap::build::app]  Auto

[           clap::output::fmt]  is_a_tty: stderr=true

error: Found argument '--baz' which wasn't expected, or isn't valid in this context



    Did you mean to put '--baz' after the subcommand 'bar'?



If you tried to supply `--baz` as a PATTERN use `-- --baz`



USAGE:

    my-test -v ...



For more information try --help






该提问来源于开源项目:clap-rs/clap

We are still working on changelog and documentation. You are not supposed to use v3 yet.


推荐阅读
  • 题目描述:给定一个区间,支持两种操作:1. 将位置a的值修改为b;2. 查询区间[a, b]内的子序列的最大和,其中子序列中相邻的元素必须具有不同的奇偶性。 ... [详细]
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • This feature automatically validates new regions using the AWS SDK, ensuring compatibility and accuracy. ... [详细]
  • 题目描述:牛客网新员工Fish每天早上都会拿着一本英文杂志,在本子上写下一些句子。他的同事Cat对这些句子非常感兴趣,但发现这些句子的单词顺序被反转了。例如,“student. a am I”实际上是“I am a student.”。Cat请求你帮助他恢复这些句子的正常顺序。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 本文介绍了几种常用的图像相似度对比方法,包括直方图方法、图像模板匹配、PSNR峰值信噪比、SSIM结构相似性和感知哈希算法。每种方法都有其优缺点,适用于不同的应用场景。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 命令模式是一种行为设计模式,它将请求封装成一个独立的对象,从而允许你参数化不同的请求、队列请求或者记录请求日志。本文将详细介绍命令模式的基本概念、组件及其在实际场景中的应用。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
author-avatar
lql
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有