Python 中的参数解析(必需与可选)

2024-03-17

我目前正在编写一个能够采用多个标志的脚本。我希望它无论最后一个参数是什么都应该是“start|stop|status”。

#!/usr/bin/env python

from argparse import ArgumentParser


def argument_analysis():
    """
This will analyze arguments, and return the region as a string, the filter as a dictionary, and the command as a string.
    :return: region,filters,command
    """
    parser_options = ArgumentParser()
    parser_options.add_argument("-r", "--region", dest='region',
                                help="Filter by region.")
    parser_options.add_argument("-n", "--name", dest='name',
                                help="Filter by hostname.")
    parser_options.add_argument("-P", "--project", dest='project',
                                help="Filter by Project tag.")
    parser_options.add_argument("-U", "--usage", dest='usage',
                                help="Filter by Usage tag.")
    parser_options.add_argument("-i", "--instance_id", dest='instance_id',
                                help="Filter by instance_id.")
    parser_options.add_argument("-t", "--type", dest='type',
                                help="Filter by instance_size.")
    parser_options.add_argument("-p", "--ip", dest='internal_ip',
                                help="Filter by internal_ip")
    parser_options.add_argument("-c", "--command", dest='command',
                                help="stop/start, or check the status of instances.")
    parser_options.add_argument("-a", "--all", dest='all', default=False, action='store_true',
                                help="No filter, display status of all servers.")
    arguments = vars(parser_options.parse_args())
    return arguments


if __name__ == '__main__':
    print argument_analysis()

我想要它,以便 ./argument_analysis_script.py 最后需要一个“停止|开始|状态”。我没有太多运气获得 ARgumentParser() 的帮助。如果有人有任何建议,那将非常有帮助。

在此先感谢您的时间。

注意:如果未输入 [stop|start|restart|status],我希望脚本停止,并解释需要 [stop|start|restart|status]。

**更新** **更新** **更新**

经过更多挖掘后,为了能够分析/使用命令行选项和参数,我偶然发现了 OptionParser,我避免使用它docs.python.org http://docs.python.org说它是已弃用 https://docs.python.org/2/library/optparse.html。不管怎样,因为这是我能找到的唯一能给我真正想要的东西,这里是我所得到的更新:

#!/usr/bin/env python

from optparse import OptionParser


def argument_analysis():
    """
This will analyze arguments, and return the region as a string, the filter as a dictionary, and the command as a string.
    :return: region,filters,command
    """
    parser = OptionParser()
    parser.add_option("-r", "--region", dest='region',
                      help="Filter by region.")
    parser.add_option("-n", "--name", dest='name',
                      help="Filter by hostname.")
    parser.add_option("-P", "--project", dest='project',
                      help="Filter by Project tag.")
    parser.add_option("-U", "--usage", dest='usage',
                      help="Filter by Usage tag.")
    parser.add_option("-i", "--instance_id", dest='instance_id',
                      help="Filter by instance_id.")
    parser.add_option("-t", "--type", dest='type',
                      help="Filter by instance_size.")
    parser.add_option("-p", "--ip", dest='internal_ip',
                      help="Filter by internal_ip")
    parser.add_option("-c", "--command", dest='command',
                      help="stop/start, or check the status of instances.")
    parser.add_option("-a", "--all", dest='all', default=False, action='store_true',
                      help="No filter, display status of all servers.")
    (options, args) = parser.parse_args()  # Grab Options specifed from above, as well as actual Arguments.

    options = vars(options)  # Convert 'options' into dictionary: key=dest_name, value=dest_value

    # Getting variables for dictionary below.
    region_filter = options['region']
    name_filter = options['name']
    project_filter = options['project']
    usage_filter = options['usage']
    instance_filter = options['instance_id']
    type_filter = options['type']
    ip_filter = options['internal_ip']
    all_filter = options['all']

    region = region_filter if region_filter else 'us-east-1' # Return 'us-east-1' region is not specified.

    filters = {'tag:Name': name_filter, 'tag:Project': project_filter, 'tag:Usage': usage_filter,
               'instance-id': instance_filter, 'instance_type': type_filter, 'private-ip-address': ip_filter,
               'all': all_filter}

    command = 'No commands.' if not args else args  #Return "No commands" if no command is specified.

    return region, filters, command


if __name__ == '__main__':
    opts_and_args = argument_analysis()
    print "Region: " + str(opts_and_args[0])
    print "Filters: " + str(opts_and_args[1])
    print "Command: " + str(opts_and_args[2])

正如您所看到的,您可以根据返回的对象或定义应用您想要的任何逻辑。感谢大家对这一问题的帮助。


也许你可以使用 argparse 来做到这一点,但另一种选择是使用sys module

import sys
print sys.argv # prints command line arguments

sys.argv在列表中包含命令行参数,因此您可以检查最后一个参数:

if sys.argv[-1] != 'start':
    print "Error, expected <something>"
    // quit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的参数解析(必需与可选) 的相关文章

随机推荐

  • 是否有用于 mp4 文件的 Java API?

    可以使用此处理 M3 文件mp3 SPI 支持 http www javazoom net mp3spi sources html 但我没有找到类似于 mp4 文件的内容 任何帮助 将不胜感激 UPDATE 我想要做的是获取文件的大小 就像
  • 如何在 SwiftUI 中有效过滤长列表?

    我一直在编写我的第一个 SwiftUI 应用程序 它管理图书收藏 它有一个List大约 3 000 个项目 加载和滚动非常高效 如果使用切换控件来过滤列表以仅显示书籍 则更新前 UI 不会冻结二十到三十秒 大概是因为 UI 线程正忙于决定是
  • JavaScript 中的基本正则表达式

    一段时间以来 我一直在尝试理解 JavaScript 中的正则表达式 但它非常复杂 您可以告诉我如何使用正则表达式分别兑换下面 URL 中的每个值 URL first middle last Return var first first v
  • 设计..首次登录后应要求更改密码

    我在我的应用程序中使用设备作为身份验证 我需要在设备中实现功能 首次登录后 用户应要求更改密码 我尝试通过模型 after create update pass change def update pass change self pass
  • 如何强制 Eclipse 请求默认工作空间?

    我注意到安装 cdt 后 Eclipse 总是加载默认工作区 中列出的工作区config ini in osgi instance area default 无论是否打开 Eclipse 都不会询问要打开哪个工作区Prompt for wo
  • 以随机顺序打印数组[重复]

    这个问题在这里已经有答案了 如何在java中以随机顺序打印数组 例子 int myArray 5 4 3 2 1 打印时 结果可能是 3 2 1 4 5 or 4 3 2 5 1 你应该看看写一个费舍尔 耶茨洗牌 http en wikip
  • 不支持的授权类型 Salesforce OAUTH2

    我正在使用 VBA 在 Salesforce 中获得授权 然后最终想要运行 Salesforce 报告并将结果转储到 Excel 中 我已编写以下内容来处理授权 但收到 unsupported grant type 错误 到目前为止我的代码
  • 批处理文件执行文件夹中的所有.exe

    我需要创建一个批处理脚本来运行文件夹中的所有 exe 文件 这必须包括子文件夹 我运行的是Windows 7 批处理文件存储在根文件夹中 我尝试了几种变体但没有成功 两个主要变化如下 REM dir exe S B gt tmpFile R
  • 安卓中的adb是什么?

    当我尝试运行 Android 程序时 出现以下错误 请解释一下到底是什么adb是的 如何重新启动呢 我收到以下错误 The connection to adb is down and a severe error has occured Y
  • 为什么 Android 上的 onCallStateChanged() 在一次调用中会被多次调用?

    我想实现一个像防火墙一样阻止呼叫的应用程序 当我调试我的应用程序时 我发现当有电话进来时 onCallStateChanged 界面中的函数电话状态监听器被调用 3 次 因此 阻止一个调用可能会导致三个日志 我很困惑 my code Ove
  • PLSQL 触发器通过 SQL 加载器触发

    当我们通过 SQL 加载器插入时 表会被触发吗 请详细解释一下 Oracle 将执行INSERT如果使用常规负载则触发 但是当你使用直接负载时不是 http docs oracle com cd E11882 01 server 112 e
  • 确定 django 中的属性是否为“DeferredAttribute”

    上下文 我在 Django Cache Machine 中发现了一个相当严重的错误 导致其失效逻辑在从 Django 1 4 升级到 1 7 后失去理智 该错误仅限于调用only 在扩展缓存机器的模型上CachingMixin 它会导致深度
  • 如何剪切csv的列

    我有一组 csv 文件 大约 250 个 每个文件有 300 到 500 条记录 我需要从每个文件中剪切 2 或 3 列并将其存储到另一个文件中 我在用着操作系统 有什么办法可以在命令或实用程序中做到这一点吗 如果您知道字段内没有出现列分隔
  • 使用 1xx 响应通过 HTTP 报告进度

    问题 通过 HTTP 提供进度信息 我正在编写一个应用程序 我想为长时间运行的请求提供进度信息 我希望客户端能够报告进度 例如完成百分比 并向用户发送消息 HTTP 1xx 响应 我的目的是在最终 HTTP 响应之前使用 HTTP 1xx
  • 如何在 Gnome 终端中对 Python 错误的输出进行着色?

    注意 我在研究如何实际做到这一点后提出这个问题 其他有点相似但实际上与我的问题不同的问题涉及 颜色编码withinpython脚本 导入颜色库within剧本 使用类似的工具Solarized改进工具 例如Vim对 python 代码进行颜
  • Python unittest:如何临时将标准输出消息重定向到缓冲区并测试其内容?

    我想捕获发送到的消息stdout our stderr 在测试期间暂时断言这些消息中是否出现某些字符串模式 import unittest class SomeTest unittest TestCase def test stdout s
  • Tomcat 6 堆大小 - 这是正确的吗?

    我在 Red Hat 机器上运行多个 tomcat 我想为每个 tomcat 配置单独的堆大小 某些实例使用更多内存 我可以在 catalina sh 文件中输入以下内容来设置堆大小最小 最大 bt CATALINA OPTS Xms64m
  • WPF 将控件可见性绑定到另一个控件的聚焦属性

    我有一个显示项目列表的组合框 我想在它旁边放置一个按钮来触发命令以查看所选项目的详细信息 到目前为止 一切都很好 现在我希望该按钮仅在组合框具有焦点时才可见 或处于 编辑 模式 但不仅在弹出窗口打开时 我想我可以将按钮的可见性绑定到组合框的
  • 命令“git checkout”的含义。 [复制]

    这个问题在这里已经有答案了 虽然我知道标题中的命令类似于撤消对当前存储库的更改 但我无法理解它的实际工作原理或如何读取该命令 任何线索都会有很大的帮助 git 结账
  • Python 中的参数解析(必需与可选)

    我目前正在编写一个能够采用多个标志的脚本 我希望它无论最后一个参数是什么都应该是 start stop status usr bin env python from argparse import ArgumentParser def ar