- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个具有多个模块的实用程序,运行哪个模块由参数决定。每个模块都有自己的参数,但所有模块将共享 4 个标准参数。为了让它工作,我只是在创建子解析器时设置了“parent”参数,但问题是我还需要能够确定在命令行上调用了哪个模块。看起来“dest”参数是执行此操作的方法,但出于某种原因,同时设置“parent”和“dest”是行不通的。
import argparse
parser = argparse.ArgumentParser() # main parser
parser.addArgument("--foo", action='store_true')
subparsers = parser.add_subparsers(dest='cmd')
# without 'parents=[parser]' it properly stores 'bar' in cmd
# however '--foo' MUST be before 'bar'
bar = subparsers.add_parser("bar", parents=[parser], add_help=False)
bar.add_argument("--test", action='store_true')
# should be able to have '--foo' before OR after 'bar'
parser.parse_args(['--foo', 'bar', '--test'])
在此代码中,add_subparsers
调用将 dest 设置为“cmd”。然后,我可以解析参数并调用 args.cmd
以获取调用的模块的名称(在本例中为 bar)。但是,当设置了 parents
时,cmd 的值始终为 None。目前我的解决方法是只有一个空的主解析器,然后简单地将 4 个标准参数复制粘贴到每个子解析器,这可行但并不完全理想。
我的问题:是否有另一种方法可以确定调用了哪个模块?为什么会发生这种情况?
最佳答案
感谢@hpaulj 在对 OP 的评论中提供的信息,我设法让它工作。
基本上,您需要主解析器和父解析器。然后,您将子解析器的 parents
属性设置为父解析器。根据您给出的示例,以下应该是一个工作示例:
import argparse
# Create parsers
parser = argparse.ArgumentParser()
parent_parser = argparse.ArgumentParser()
# Add arguments to parent parser
parent_parser.add_argument("--foo", action='store_true')
# Create subparser
subparsers = parser.add_subparsers(dest='cmd')
# Add to the subparser
bar = subparsers.add_parser("bar", parents=[parent_parser], add_help=False)
bar.add_argument("--test", action='store_true')
baz = subparsers.add_parser("baz", parents=[parent_parser], add_help=False)
baz.add_argument("--baz-test", action="store_true")
# should be able to have '--foo' before OR after 'bar'
print(parser.parse_args(['bar', '--test']))
print(parser.parse_args(["baz", "--baz-test"]))
输出如下:
Namespace(cmd='bar', foo=False, test=True)
Namespace(baz_test=True, cmd='baz', foo=False)
然后你应该能够做这样的事情:
args = parser.parse_args()
if args.cmd == "bar":
print("bar was specified")
elif args.cmd == "baz":
print("baz was specified")
这可能不是完美的解决方案,但应该可行。
(使用 Python 3.5.2 测试)
关于Python argparse 子解析器 dest 参数不适用于父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60422690/
MOV可能是每个人在学习ASM时都会学到的第一条指令。 刚才我遇到了一本书Assembly Language Programming in GNU/Linux for IA32 Architectur
我在两个不同的数据库中有两个表,其结构略有不同:destTable:姓名、地址、城市、州、邮政编码、国家/地区、电子邮件、电话、公司srceTable:公司、地址、城市、州、邮政编码、国家/地区、姓名
我正在尝试安装重新思考 httr::set_config( httr::config( ssl_verifypeer = 0L ) ) with_config(use_proxy("http://my
发生了什么我使用 Karma 和 Mocha 来测试我的代码,但是它是在我的电脑 (windows7) 上本地传递的,而不是通过 Travis CI 传递的!! 我做什么我只是编写代码来调用本地 Ur
我正在尝试通过阅读以下内容来学习 Java 泛型通配符: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.htm
我正在尝试通过阅读以下内容来学习 Java 泛型通配符: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.htm
在使用 gulp-imagemin 进行优化图像 的 gulp 任务中,我遇到了烦人的 dest.on 错误。我在这里进行了一些不常见的设置,使用 gulp-load-plugins 将我的所有任务与
在 SQL Server 2008 中,是否可以将源表中的数据插入到 dest 表中,并同时使用 dest 表中的 @@identity 更新源表? 例子 表格来源: Id - UniqueId Na
我在尝试复制一组文件时遇到问题,并且在调用.dest('some folder')时,整个文件夹结构丢失了。 我搜索并找到答案,建议我在调用{base:'.'}时应提供gulp.src(...)作为选
您好,我遇到了 gulp 问题。下面的代码不会在 dist/文件夹中创建任何内容 function compileSources() { return gulp.src([ './src/**
我很难让 gulp.dest 在任何地方输出任何内容。我特别想输出到项目的根目录(我劫持了一个 ASP.NET Core 项目,仅用于 TypeScript 开发)。我非常感谢您帮助我如何让 dest
例如,我想遍历所有 src 文件并将每个文件移动到以文件名本身命名的文件夹中。 来自: hello.js omg.js 到: hello/ hello.js omg/ omg.js 我有这个任
我想制作返回流的 npm 模块,然后将其通过管道传输到其他应用程序中的 gulp.dest。 例子: // some-module.js module.exports = function() {
我正在尝试将编译后的 .css 文件传送到与其原始 .scss 文件相同的目录 gulp.task('sass', function() { return gulp.src([ appDi
我正在尝试使用 jpegoptim 压缩几张图片。手册页中有一个选项用于指定新压缩的 jpg 文件的目的地(因此它不会覆盖现有文件)。我尝试使用该选项,但我不断收到 jpegoptim: invali
我的 gulp 代码部分如下所示 gulp.src(['../application-base/**/**.js', '!../application-base/assets/**/**.js'],
Spring Upload file 报错FileNotFoundException 环境: Springboot 2.0.4 JDK8 内嵌 Apache Tomcat/8.
我正在编写一个具有多个模块的实用程序,运行哪个模块由参数决定。每个模块都有自己的参数,但所有模块将共享 4 个标准参数。为了让它工作,我只是在创建子解析器时设置了“parent”参数,但问题是我还需要
我正在尝试复制从以 _${env}.xml 结尾的根文件夹开始的所有目录下的文件,如果找到,则从文件名中删除 _${env} 或复制目录中存在的 xml 文件.我无法让它工作,请帮忙。(可能我需要一个
我需要优化每个目录中找到的所有图像并将其记录到其中,而无需单独设置每个文件夹的路径。我不明白如何做到这一点。 var gulp = require('gulp'); var imageminJpegt
我是一名优秀的程序员,十分优秀!