当前位置: 首页 > 面试题库 >

如何在Python中处理命令行参数?

杜起运
2023-03-14
问题内容

如果我期望像001或999这样的东西(这次让我们将期望值限制为001 …
999范围),并且传递了其他一些参数,并且想忽略任何意外内容,那么这将是处理命令行参数的简单表达式?

我知道,例如,如果我需要确定是否在参数之间传递了“ debug”,它将像这样:

if 'debug' in argv[1:]:
  print 'Will be running in debug mode.'

如何确定是否通过了009或575?

所有这些都是预期的电话:

python script.py
python script.py 011
python script.py 256 debug
python script.py 391 xls
python script.py 999 debug pdf

在这一点上,我不在乎这样的电话:

python script.py 001 002 245 568
python script.py some unexpected argument
python script.py 0001
python script.py 02

…第一个-由于存在多个“数字”参数;第二-因为…好吧,意想不到的争论;第三和第四-由于非3位数参数


问题答案:

正如其他人回答的那样,optparse是最好的选择,但是如果您只想快速编写代码,请尝试以下操作:

import sys, re

first_re = re.compile(r'^\d{3}$')

if len(sys.argv) > 1:

    if first_re.match(sys.argv[1]):
        print "Primary argument is : ", sys.argv[1]
    else:
        raise ValueError("First argument should be ...")

    args = sys.argv[2:]

else:

    args = ()

# ... anywhere in code ...

if 'debug' in args:
    print 'debug flag'

if 'xls' in args:
    print 'xls flag'

编辑 :这是一个optparse的示例,因为这么多的人在回答optparse时并没有真正解释原因,也没有解释要使其正常工作必须进行的更改。

使用optparse的主要原因是,它为您提供了更高的灵活性以供以后扩展,并为您提供了更多的命令行灵活性。换句话说,您的选项可以按任何顺序出现,并且使用信息会自动生成。但是,要使其与optparse一起使用,您需要更改规范,以在可选参数前面加上“-”或“-”,并且需要允许所有参数以任何顺序排列。

因此,这是使用optparse的示例:

import sys, re, optparse

first_re = re.compile(r'^\d{3}$')

parser = optparse.OptionParser()
parser.set_defaults(debug=False,xls=False)
parser.add_option('--debug', action='store_true', dest='debug')
parser.add_option('--xls', action='store_true', dest='xls')
(options, args) = parser.parse_args()

if len(args) == 1:
    if first_re.match(args[0]):
        print "Primary argument is : ", args[0]
    else:
        raise ValueError("First argument should be ...")
elif len(args) > 1:
    raise ValueError("Too many command line arguments")

if options.debug:
    print 'debug flag'

if options.xls:
    print 'xls flag'

optparse与您的规范之间的区别在于,现在您可以拥有以下命令行:

python script.py --debug --xls 001

您可以通过调用parser.add_option()轻松添加新选项



 类似资料:
  • 问题内容: Python程序员可以通过哪些方式做到这一点? 问题答案: 标准库中的规范解决方案是: 这是一个例子: 任意顺序的多个选项。 短期和长期选择。 默认值。 生成使用帮助消息。

  • 当有空格,尤其是javaagent参数时,通过将参数传递给我的命令会遇到一些问题。我也遵循了这个建议,在分号后面加上了双引号,但运气不好。 我使用的命令是: 不幸的是,这似乎不起作用。如果有帮助的话,我在OSX上使用bash。 知道我错过了什么吗?

  • 10.6. 处理命令行参数 Python 完备支持创建在命令行运行的程序,并且连同命令行参数和短长样式来指定各种选项。这些并非是 XML 特定的,但是这样的脚本可以充分使用命令行处理,看来是时候提一下它了。 如果不理解命令行参数如何暴露给你的 Python 程序,讨论命令行处理是很困难的,所以让我们先写个简单那的程序来看一下。 例 10.20. sys.argv 介绍 如果您还没有下载本书附带的例

  • 问题内容: 当我编写一个解析命令行参数的Spring命令行应用程序时,如何将它们传递给Spring?我是否希望结构化main()以便它首先解析命令行args,然后解析其Spring?即使这样,它将如何将持有解析的args的对象传递给Spring? 问题答案: 我可以想到两种可能性。 1)设置静态参考。(尽管通常不赞成使用静态变量,但在这种情况下可以,因为只能有1个命令行调用)。 然后,您可以通过以

  • 在你能处理本书的第一部分之前,你需要完成一些简单的黑魔法,教你如何使用 Python 中的命令行参数。 传统上我们称这种黑魔法为“spike”。该术语来自于一个小型测试项目,涵盖了更大的流程或项目的所有元素。这个小型测试黑魔法“spike”通过一切手段,来确保你可以使用它。spike 的目的是,通过排练来了解如何使用一些新的库或工具,然后真正在你的项目中使用它。 这也是第一个具有“挑战性”的练习。

  • 问题内容: 在Java中解析命令行参数的好方法是什么? 问题答案: 例如,这是你用来解析2个字符串参数的方法: 从命令行使用: