我一直在大量使用“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中可以做类似的事吗?
答案 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有一些很好的参数解析库:
示例:
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")
当然,由于这些只是标志,你可以返回True
和False
而不是None
和arg,但我试图保持它类似于Ruby功能为posisble。