导致Python的argparse执行默认操作

2024-02-07

我正在使用 argparse 的操作将各种数据添加到类中。如果命令行未提供该参数,我想对默认值使用该操作。这可能吗? 谢谢!


argparse不使用action当应用default。它只是使用setattr。它可能会使用type如果默认是字符串。但你可以调用action直接地。

这里我使用了从文档中借用的自定义操作类。在第一个parse_args什么都没发生。然后我创建一个新的namespace,并调用默认操作。然后我将该命名空间传递给parse_args。要理解这一点,您需要将其导入交互式 shell,并检查命名空间和操作的属性。

# sample custom action from docs
class FooAction(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        print('Setting: %r %r %r' % (namespace, values, option_string))
        setattr(namespace, self.dest, 'action:'+values)
p = argparse.ArgumentParser()
a1 = p.add_argument('--foo', action=FooAction, default='default')
print 'action:',a1
print p.parse_args([])

ns = argparse.Namespace()
a1(p, ns, a1.default, 'no string') # call action
print p.parse_args([],ns)
print p.parse_args(['--foo','1'],ns)

其产生:

action: FooAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default='default', type=None, choices=None, help=None, metavar=None)
Namespace(foo='default')
Setting: Namespace() 'default' 'no string'
Namespace(foo='action:default')
Setting: Namespace(foo='action:default') '1' '--foo'
Namespace(foo='action:1')

我定制了输出以突出显示何时使用该操作。


这是一种对命令行上未给出的参数(或给定值 == 为默认值)执行特殊操作的方法。这是给出的类的简化https://stackoverflow.com/a/24638908/901925 https://stackoverflow.com/a/24638908/901925.

class Parser1:
    def __init__(self, desc):
        self.parser = argparse.ArgumentParser(description=desc)
        self.actions = []

    def milestone(self, help_='milestone for latest release.', default=None):
        action = self.parser.add_argument('-m', '--milestone', help=help_, default=default)
        self.actions.append(action)
        return self

    def parse(self):
        args = self.parser.parse_args()
        for a in self.actions:
            if getattr(args, a.dest) == a.default:
                print 'Please specify', a.dest
                values = raw_input('>')
                setattr(args, a.dest, values)
        return args

print Parser1('desc').milestone(default='PROMPT').parse()

提示完成后parse_args。我看不出有什么理由打电话parse_args again.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导致Python的argparse执行默认操作 的相关文章

随机推荐

  • Blobstore 上传 + Ajax/替代方案

    下面的代码可以完美运行 我唯一关心的是我想将下面的内容转换为 AJAX alternative 这样就不需要刷新整个页面来提交此请求 如果可能的话 还包括加载进度条等
  • 在节点中使用 zone.js 挂钩

    我正在尝试使用编写一个简单的演示角度 zone js https github com angular zone js在节点中 但由于某种原因既没有beforeTask or afterTask正在被召唤 这是我正在运行的代码 requir
  • Indy 10 中的 TIdHTTP

    我以前在 Delphi 6 天时就使用过 Indy 现在我正在使用 Indy 10 我想做的事情非常简单 但我没有看到简单的方法 所以我一定错过了一些东西 我想做的是这样的 这是我正在使用的实际代码 procedure TForm1 btn
  • 如何从 URL 流式传输/下载和播放音频?

    我需要在 iOS 上运行的 Unity3D 中流式传输或下载并播放从 URL 获取的音频 音频来自文本转音频服务 我需要在 Unity 上播放它 我一上午都在谷歌上搜索 没有找到有效的解决方案 Unity3D文档中有一个代码片段 WWW音频
  • 从Java访问gradle资源

    我有一个具有这种结构的基于 gradle 的 java 项目 myproject src main java resources myresource xml build classes main myresource xml resour
  • 雅虎财经 V7 API 现在需要 cookie? (Python)

    url https query2 finance yahoo com v7 finance quote symbols TSLA fields regularMarketPreviousClose region US lang en US
  • 在使用 fit_generator 和 evaluate_generator 训练网络时,如何绘制 AUC 和 ROC?

    我正在使用生成器来训练和预测数据的分类 这是一个例子图像数据生成器 https blog keras io building powerful image classification models using very little da
  • 在同一服务器上加载同一项目的不同版本的配置文件的最佳方法是什么?

    我有一个大型 php 项目 依赖于两个级别的配置文件 在我的项目文件夹中 我有一个 default config ini 它被加载 然后与站点特定的配置文件合并 目前代码正在读取环境变量PROJECT CONFIG指向特定的配置文件 这对于
  • 我应该通过 SessionAware 还是 ActionContext 获取会话?

    在阅读了通过以下方式获取会话映射之间的差异之后ActionContext getContext getSession 并让它注入SessionAware我想知道哪种方法是首选方法 为什么 该API推荐使用SessionAware 我在网上读
  • 为什么 GetMessageW 会在我的 WPF 应用程序中占用大量 CPU 使用率?

    我在这里遇到了一个严重的难题 我正在调查应用程序中 WPF 组件的性能问题 我们的 net 应用程序非常大 并且几乎完全采用 Windows 窗体 作为新计划的一部分 我们使用丰富的 WPF 用户界面重写了我们的核心组件之一 有很多 Win
  • 为什么 git merge 有时会创建提交,有时不会?

    当我做git merge从另一个分支到当前工作区 git 有时会进行新的提交 Merge remote tracking branch xxx into xxx 有时 它不会 Fast forward src files 那么什么决定了是否
  • Mongoose findOne 在嵌套记录上无法按预期工作

    我在 MongoDB 中有一个集合 其简化版本如下所示 Dealers Id 123 Name Someone Email email protected cdn cgi l email protection Vehicles Id 123
  • 找不到 momd 文件:核心数据问题

    噢天啊 我搞砸了一些事情 我是一名 Core Data 菜鸟 正在开发我的第一个 iOS 应用程序 经过多次堆栈溢出后 我正在使用以下代码 NSString path NSBundle mainBundle pathForResource
  • Go 如何处理 Google App Engine 上的并发请求

    我对 Go 如何处理 Google App Engine 上的并发请求有点困惑 所以我希望有人能提供一些澄清 以下是我收集到的事实 Go 在 App Engine 上是单线程的 这是因为可以通过使用多个线程创建竞争条件来执行任意指针算术 h
  • 离子降低滚动速度

    我在尝试从此代码减慢滚动速度时遇到问题 ionicScrollDelegate getByHandle credit scrollBottom true 我怎样才能减慢滚动速度 因为现在它对我来说滚动得太快了 我需要放慢滚动速度 就像星球大
  • Python - 安装有扩展的远程 Webdriver

    我想使用以下命令在不同浏览器版本上测试一个扩展浏览器堆栈 http browserstack com 这是一个返回具有指定功能的驱动程序的函数 我有一个 crx file对于 Chrome 和 xpi file对于我本地计算机上的 Fire
  • 在屏幕上查找复合位置

    我正在 Java 中为 SWT 和 AWT 实现一个屏幕键盘 一件重要的事情是将键盘移动到可以显示所选文本字段的位置 并且不要位于屏幕键盘后面 对于 AWT 我可以检测当前选定组件的位置 Component owner KeyboardFo
  • 对有效的类型规则感到困惑

    我似乎再次错过了有关有效类型的一些难题 代码中的注释本质上是我的问题 但这是我能想到在适当的上下文中提出这个问题的唯一方法 include
  • 如何使用facet_grid或facet_wrap保持条的均匀厚度并切换条位置?

    我想用水平条形图显示数据并通过分组变量对其进行分面 因为我想要一个带有分面的水平图 所以我将使用geom barh来自ggstance包裹 我有一个数据集 其中我的观察结果被分为几种不同的类型和计数 像这样的事情 library tidyv
  • 导致Python的argparse执行默认操作

    我正在使用 argparse 的操作将各种数据添加到类中 如果命令行未提供该参数 我想对默认值使用该操作 这可能吗 谢谢 argparse不使用action当应用default 它只是使用setattr 它可能会使用type如果默认是字符串