如何在Python中进行真正廉价的命令行解析?
我一直在大量使用这个答案。这是伟大的,为了我的目的,总是我需要的 现在我发现自己又回到了Python领域,因为内部库支持我想做的事情。我正在考虑将它移植到Ruby,但这超出了这个问题的范围,但我想使用类似的东西 下面是我在Ruby中经常使用的非常便宜的方法:如何在Python中进行真正廉价的命令行解析?,python,ruby,parsing,command-line-arguments,Python,Ruby,Parsing,Command Line Arguments,我一直在大量使用这个答案。这是伟大的,为了我的目的,总是我需要的 现在我发现自己又回到了Python领域,因为内部库支持我想做的事情。我正在考虑将它移植到Ruby,但这超出了这个问题的范围,但我想使用类似的东西 下面是我在Ruby中经常使用的非常便宜的方法: $quiet = ARGV.delete('-d') $interactive = ARGV.delete('-i') 如果ARGV数组中有-d,那么$quiet被设置为-d而不是nil。如果没有-d,那么$quiet将变为零
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
如果ARGV数组中有-d,那么$quiet被设置为-d而不是nil。如果没有-d,那么$quiet将变为零
我可以在Python中做类似的事情吗?试试这个:
import sys
quiet = 1 if "-d" in sys.argv else None
您可能需要使用sys.argv:
如果要从argv中删除'-d',请将第二行更改为:
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')
Python有几个很好的参数解析库: 例如:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-d", action='store_true')
IMHO,如果您不想使用argparse,最简单的方法是使用一个helper函数:
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")
当然,由于这些只是标志,您可以返回True和False,而不是None和arg,但我尝试将其与Ruby功能保持类似,就像posisble一样。您检查过argparse吗?我熟悉argparse,但它比我在IIRC上面发布的内容更重。非常便宜,完全符合要求。执行所需的操作。如果找到该选项,则不会从args中删除该选项,这会使使用剩余的文件名等变得更困难。@kindall将行更改为:quiet='-d'在argv和argv中。删除'-d'或Truebetter编写一个小的单行函数:您不需要先创建一个新的argparser对象吗?类似parser=argparse.ArgumentParserdescription='Processing some integer.'之类的内容。从Yes开始。类似于jh314 sez。这可以准确地工作,但mbcoder的响应更彻底,并且提供了我想要的更短的语法。
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")