问题标签 [subcommand]
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.
python - 在单个命令行中多次调用同一子命令
我试图弄清楚如何使用 argparser 来执行以下操作:
getBuild
本身就是一个子命令。我的目标是让脚本能够链接一系列子命令(executeBuild
作为其中之一)并按顺序执行它们。在上面的示例中,它将执行构建,然后设置环境,然后再次执行构建。如何使用 argparse 完成此操作?我尝试了以下方法:
但是,似乎每当我这样做时,它都会进入子命令executeBuild
并报告它不知道是什么executeBuild
。我已经尝试解析额外的,以便我可以重复调用/链,但是,第一个视图属性似乎已被覆盖,所以我什至不能只保存额外的选项并迭代。
python - 参数的可选参数以及使用 argparse 的子命令
我在尝试允许将可选测试参数插入到我创建的 CLI 中时遇到问题。这是我能做的:
其中 build 是一个子命令,而 --test 允许系统指向默认测试服务器。但是,我想允许用户在 --test 之后指定一个额外的、可选的服务器属性,这样用户就可以将测试服务器指向他们想要的任何地方。例子:
我的代码目前如下所示:
但是,无论我将 nargs 更改为什么,它都会开始禁止原来的,即 --test。有没有办法让我两者兼得?
python - 如何使用 argparse 处理 CLI 子命令
我需要实现程序接受子命令的命令行界面。
例如,如果程序名为“foo”,则 CLI 看起来像
cmd1
并且cmd3
必须与它们的至少一个选项一起使用,并且三个cmd*
参数始终是互斥的。
我正在尝试在 argparse 中使用子解析器,但目前没有成功。问题在于cmd2
,它没有参数:
如果我尝试添加不带参数的子解析器条目,则返回的命名空间parse_args
将不包含任何告诉我选择了此选项的信息(请参见下面的示例)。如果我尝试将cmd2
作为参数添加到parser
(而不是子解析器),那么 argparse 将期望该cmd2
参数后跟任何子解析器参数。
有没有一种简单的方法来实现这一点argparse
?用例应该很常见……</p>
以下是我迄今为止所尝试的更接近我需要的内容:
git - 如何在 Git 中给标签起别名?
我有一个 Git 命令别名来检查存储库中的最新标签:
~/.gitconfig
:
所以我可以在正确标记的存储库中使用它,如下所示:
我有 checkout 命令的命令别名:
~/.gitconfig
:
checkout-latest
不适用于结帐的命令别名:
如何配置 Git,以便我可以使用 latest 作为指向以编程方式确定的最新标签的标签别名?我想这样使用它:
和
请注意,子命令和我想要的变体中的标签之间没有破折号。
python - 同时解析python中的多个子命令或以其他方式对解析的参数进行分组
我正在将 Bash shell 安装程序实用程序转换为 Python 2.7,并且需要实现复杂的 CLI,以便能够解析数十个参数(可能高达 ~150)。除了十几个通用部署选项之外,这些是 Puppet 类变量的名称,这些选项在 shell 版本中可用。
然而,在我开始添加更多变量之后,我面临着几个挑战: 1. 我需要将参数分组到单独的字典中,以便将部署选项与 Puppet 变量分开。如果它们被扔到同一个桶中,那么我将不得不编写一些逻辑来对它们进行排序,可能会重命名参数,然后字典合并不会是微不足道的。2. 可能存在同名但属于不同 Puppet 类的变量,所以我认为子命令可以让我过滤去哪里,避免名称冲突。
目前我已经通过简单地添加多个解析器来实现参数解析:
这种方法无法解决问题 2 的问题。此外,第一个解析器使用“-h”选项,其余参数未显示在帮助中。
我尝试使用选择的示例作为答案,但我无法同时使用这两个命令。
结果我:
同样的结果是当我尝试用两个子解析器定义父级时。
问题
- 我可以以某种方式使用 parser.add_argument_group 进行参数解析还是仅用于帮助打印输出中的分组?它将解决问题 1,而不会丢失帮助的副作用。将其传递为
parse_known_args(namespace=argument_group)
(如果我正确地记得我的实验)会获取所有变量(没关系),但也会在结果 dict 中获取所有 Python 对象内容(这对 hieradata YAML 不利) - 我在第二个示例中缺少允许使用多个子命令的内容?或者 argparse 是不可能的?
- 对命令行变量进行分组的任何其他建议?我查看了 Click,但对于我的任务,没有发现比标准 argparse 有任何优势。
注意:我是系统管理员,不是程序员,所以请对我进行非对象样式编码。:)
谢谢
已解决的参数分组通过 hpaulj 建议的答案解决。
这让我得到了问题 1 的预期结果。直到我将有多个具有相同名称的参数。解决方案可能看起来很难看,但至少可以按预期工作。
python - argparse:解析多个子命令
做了一些研究,但找不到任何可行的解决方案。我正在尝试解析以下命令行,其中“test”和“train”是两个独立的子命令,每个子命令都有不同的参数:
我一直在尝试使用两个子解析器('test','train'),但似乎当时只能解析一个。让主解析器的那些子解析器父级也很棒,例如命令'-a'不必同时添加到子解析器'train'和'test'
有什么解决办法吗?
perl - 编辑 executavble 命令以在 Perl 中生成随机数生成器
我在 Perl 中使用这个模块Crypt::PRNG来生成随机数。使用 random string 命令时,数字生成似乎是真正的随机,它可以使用数字 0-9 以及其他字符,并创建指定位数的随机字符串,问题是前导 0。
其中 n 是位数,是否有类似于上述命令的可执行命令来修复前导 0,这样我就可以肯定得到一个 n 位数?我的意图是仅将第一个数字固定为“123456789”。有谁知道如何做到这一点?提前致谢。
command-line - 使用 argparse 将大型程序划分为子命令
我想使用六个子命令(使用 argparse 库中的子解析器)将我的大程序分成更小的独立程序,并能够单独运行它们。换句话说,我设想一个接一个地从命令行运行六个命令,其中每个命令的结果作为下一个命令的参数输入。(或者如果使用 argparse 无法做到这一点,那么至少可以通过某种方式独立运行这六个部分中的每一个)。
我对一个解析器没有任何问题,但是当我试图了解如何使用子解析器来完成这项任务时,我发现文档太混乱了。
目前我的代码类似于
所以我想要的行为是在命令行上我可以输入
因此,如果一个子命令出现问题,我可以独立运行该子命令进行调试。
任何帮助理解我应该做什么的逻辑将不胜感激。我什至不确定我想要的行为是否是我应该想要的行为。
powershell - 命令输出打印而不是在 Powershell 中捕获
一般来说,我知道如何将命令的输出捕获到 Powershell 中的变量中:
Python 3 打印它的版本,但它被捕获到变量$output
中,并且控制台上没有显示任何内容。正如预期的那样:
但在 Python 2 的情况下,它不起作用。Python 2 打印它的版本,但它显示在控制台上而不是捕获,并且变量$output
为空。
我尝试了一些替代语法,但到目前为止没有任何帮助:
如果我在 中使用它Write-Command
,输出如下所示:
Python 2 如何打印它没有被捕获到变量中的版本,并且无论如何都可以捕获它?
python - 我可以添加 ArgumentParser 来解析子命令吗?
对于我的玩具项目mpu
,我想要以下命令:
所以假设我有一个命令run_init()
,一个命令run_stylecheck()
和一个argparse.ArgumentParser
名为的对象parser
:
如何将这两个命令添加到它?
限制
请不要建议sys.argv
手动解析的解决方案,也不要click
。第一个不是一个选项,因为它太难扩展,第二个不是一个选项,因为我特别不想使用外部依赖项 - 尽管click
很棒。
https://stackoverflow.com/a/27529806/562769我认为这也不是一个选项,因为这将是很多不同的命令,并且提供解析器对象的子模块不会调用该对象。