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

发布于 2021-01-29 18:35:01

如果我期望像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位数参数。

关注者
0
被浏览
161
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    正如其他人回答的那样,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()轻松添加新选项



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看