问题标签 [structopt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 使用 clap 和 structopt 获取不同命令行选项的相对顺序
问题
我有一个带有不同选项的命令,这些选项的相对顺序对命令的语义很重要。例如,在 中command --config A --some-option --config-file B --random-option --config C --another-option --more-options --config-file D
,的相对顺序A, B, C, D
很重要,因为它会影响命令的含义。
如果我只是定义选项如下:
然后我会得到两个向量,configs = [A, C]
但是和config_files = [B, D]
中的元素之间的相对顺序已经丢失了。configs
config_files
想法
自定义解析函数
这个想法是提供一个自定义解析函数,并在解析每个选项时使用计数器记录索引。不幸的是,解析函数没有按照命令定义的原始顺序调用。
别名
我可以为该选项添加别名,如下所示:
这种方法有两个问题:
- 我需要一种方法来区分选项是否通过
--config
or--config-file
传递(仅通过检查值并不总是可以弄清楚值是如何传递的)。 - 我无法为可见别名提供简短选项。
相同的向量,多个选项
另一个想法是附加多个structopt
指令,以便两个选项使用相同的底层向量。不幸的是,它不起作用——structopt
只使用最后一个指令。就像是:
恢复订单
我可以尝试通过搜索解析值来恢复原始顺序。但这意味着我将不得不复制相当多的解析逻辑(例如,需要支持传递--config=X
, --config X
,需要处理X
作为另一个选项的输入出现等)。
我宁愿有办法可靠地获得原件,而不是丢失订单并尝试以可能脆弱的方式恢复它。
rust - 从输入中的任何位置解析 Structopt 标志
我希望能够在我的命令行工具中使用“通用”标志,该工具使用StructOpt
. 也就是说,如果我有一个标志(例如--debug
),无论该标志在输入中的哪个位置,我都希望它的行为相同:
(alpha
并且--debug
在此示例中只是有用的占位符;实际的子命令和标志会有所不同。)
实际行为:
预期行为:
这是我的main.rs
代码:
这是我的文件(上面的示例在没有依赖Cargo.toml
项的情况下不起作用):structopt
有没有办法在不复制子命令每个级别的“通用”标志的情况下做到这一点?
rust - 使用 structopt 时,如何测试用户是否提供了选项或是否来自默认值?
我正在使用structopt
板条箱,并且具有以下结构:
如果options.length
是50
,我怎么知道它来自默认值 50,或者用户提供的值 50?
rust - structopt:错误[E0277]:特征绑定`String:From<&OsStr>`
我正在使用 Rust 的structopt
crate,但是当我尝试编译示例时,出现以下错误,
rust - structopt 是否支持多上下文位置参数?
我正在尝试移植seq
到structopt
,我应该如何支持,
请注意,参数在参数列表中的位置发生了LAST
变化,为了完整起见,最好知道BOTH,
- 是否
structopt
支持与上下文相关的不同位置参数,如果支持,如何? - 是否
structopt
支持右锚定的位置参数,如果支持,如何?
rust - 你能构建一个 structopt 解析器来接受命令行的其余部分(或多个参数)吗?
structopt
有一个简洁的功能,它可以接受一个类型化的参数,因为Vec<T>
它会吞噬命令行的其余部分。
它还能够接受您创建的类型,
如果字段类型没有
FromStr
实现,或者您想提供除 之外的自定义解析方案FromStr
,您可以使用以下方式提供自定义字符串解析器parse(...)
您创建的类型是否可以不是标量并且具有多个值或包装 a是否有一种方法可以为包装但重新排序其参数的类型或包含多个字段的结构Vec<T>
创建自定义解析器,例如像这样Vec<T>
我需要一个不同的结构,因为参数名称取决于顺序,(如果有一个参数,它只是“最后一个”,如果有两个参数,第一个参数不是最后一个,它是“第一个”,第二个参数是“最后一个” )。我想知道是否有办法编写一个解析器来理解这些细微差别(如上所述),或者可以重新排序一个向量以适应它们。
rust - 在单独的文件中定义时,structopt 无法找到其 Args 解析器
我开始使用 Rust 中的命令行工具,并从一开始就碰壁。StructOpt
我可以使用if Opt
struct is defined in解析命令行参数main.rs
,但由于我希望能够将Opt
struct 传递到库代码中,所以我在它自己的文件中定义它,以便库的其他部分知道它是什么所有关于。
这是倾销错误最少的代码版本,尽管我承认它在很大程度上是通过尝试编译器建议的东西和一些随机的 SO 建议拼凑而成的,所以它可能是完全错误的。
我得到的构建错误是:
(是的,我已经尝试添加use opt::structopt::clap::Arg;
,以防万一,但错误并没有消失,我收到有关未使用导入的警告 - 同时仍被告知尝试添加use
未使用的相同内容,这很有趣)
Cargo.toml
src/main.rs
src/lib.rs
src/opt.ts
建议感激不尽。
rust - 如何使用 structopt 创建嵌套子命令?
介绍
我目前有子命令正在使用structopt
,类似于其他答案。但是,我希望嵌套子命令的docker
工作方式类似:
当前代码
main.rs
cli/mod.rs
我试过的
添加了另一个结构:main.rs
cli/mod.rs
但是我收到以下错误: