如何在Python中进行真正便宜的命令行解析?

时间:2013-07-19 20:19:06

标签: python ruby parsing command-line-arguments

我一直在大量使用“Really Cheap Command-Line Option Parsing in Ruby”中的答案。这对我的目的来说很棒,总是我需要的。

现在我发现自己回到了Python领域,因为内部库支持我想做的事情。我正在考虑将它移植到Ruby,但这超出了这个问题的范围,但我想使用类似的东西。

这是我在Ruby中经常使用的非常便宜的方法:

$quiet       = ARGV.delete('-d')
$interactive = ARGV.delete('-i')

如果"-d"数组中有ARGV,则$quiet设置为"-d"而不是nil。如果没有"-d",则$quiet会变为nil

我在Python中可以做类似的事吗?

5 个答案:

答案 0 :(得分:6)

您可能想要使用sys.argv

from sys import argv
quiet = '-d' in argv # True if '-d' in argv else False

如果您要从'-d'中删除argv,请将第二行更改为:

quiet = '-d' in argv and (argv.remove('-d') or True)

如果这降低了它的便宜性,让我们来做它的功能:

getArg = lambda x: x in argv and (argv.remove(x) or True)
quiet = getArg('-d')
interactive = getArg('-i')

答案 1 :(得分:2)

Python有一些很好的参数解析库:

  1. argparse
  2. optparse (depreciated since 2.7)
  3. 示例:

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-d", action='store_true')
    

答案 2 :(得分:1)

试试这个:

import sys

quiet = 1 if "-d" in sys.argv else None

答案 3 :(得分:1)

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-d", action='store_true')

args = parser.parse_args()

if (args.d):
   Print "D switch is on!"

答案 4 :(得分:0)

恕我直言,最轻的方式(如果你不想使用argparse)将是一个辅助功能:

import sys

def flag(arg):
    try:
        index = sys.argv.index(arg)
    except ValueError:
        return None
    else:
        return sys.argv.pop(index)

用法:

quiet, interactive = flag("-d"), flag("-i")

当然,由于这些只是标志,你可以返回TrueFalse而不是None和arg,但我试图保持它类似于Ruby功能为posisble。