首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在子命令后通过structopt crate使用CLI参数?

如何在子命令后通过structopt crate使用CLI参数?
EN

Stack Overflow用户
提问于 2020-01-23 04:51:59
回答 2查看 844关注 0票数 3

例如,使用运行我的应用程序

代码语言:javascript
复制
./app --foo=bar get

运行良好,但是

代码语言:javascript
复制
./app get --foo=bar

生成一个错误:

代码语言:javascript
复制
error: Found argument '--foo' which wasn't expected, or isn't valid in this context

USAGE:
    app --foo <foo> get

代码:

代码语言:javascript
复制
use structopt::*;

#[derive(Debug, StructOpt)]
#[structopt(name = "app")]
struct CliArgs {
    #[structopt(long)]
    foo: String,
    #[structopt(subcommand)]
    cmd: Cmd,
}

#[derive(Debug, StructOpt)]
enum Cmd {
    Get,
    Set,
}

fn main() {
    let args = CliArgs::from_args();
    println!("{:?}", args);
}

依赖关系:

代码语言:javascript
复制
structopt = { version = "0.3", features = [ "paw" ] }
paw = "1.0"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-23 05:19:03

根据issue 237的说法,有一个global参数。出乎意料的是,文档中没有提到它。

global = true中,它工作得很好:

代码语言:javascript
复制
use structopt::*;

#[derive(Debug, StructOpt)]
#[structopt(name = "cli")]
struct CliArgs {
    #[structopt(
        long,
        global = true,
        default_value = "")]
    foo: String,
    #[structopt(subcommand)]
    cmd: Cmd,
}

#[derive(Debug, StructOpt)]
enum Cmd {
    Get,
    Set,
}

fn main() {
    let args = CliArgs::from_args();
    println!("{:?}", args);
}

请注意,全局参数必须是可选的或具有默认值。

票数 4
EN

Stack Overflow用户

发布于 2020-01-23 05:19:07

您需要为每个具有参数的命令枚举变量提供另一个结构:

代码语言:javascript
复制
use structopt::*; // 0.3.8

#[derive(Debug, StructOpt)]
struct CliArgs {
    #[structopt(subcommand)]
    cmd: Cmd,
}

#[derive(Debug, StructOpt)]
enum Cmd {
    Get(GetArgs),
    Set,
}

#[derive(Debug, StructOpt)]
struct GetArgs {
    #[structopt(long)]
    foo: String,
}

fn main() {
    let args = CliArgs::from_args();
    println!("{:?}", args);
}
代码语言:javascript
复制
./target/debug/example get --foo=1
CliArgs { cmd: Get(GetArgs { foo: "1" }) }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59868058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档