0

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

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

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

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

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

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

4

5 回答 5

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')
于 2013-07-19T20:23:25.857 回答
2

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

  1. 参数解析
  2. optparse(自 2.7 起已贬值)

例子:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-d", action='store_true')
于 2013-07-19T20:24:00.677 回答
1

尝试这个:

import sys

quiet = 1 if "-d" in sys.argv else None
于 2013-07-19T20:23:16.937 回答
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!"
于 2013-07-19T20:23:55.050 回答
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")

当然,由于这些只是标志,您可以返回TrueandFalse而不是None和 arg,但我试图让它尽可能类似于 Ruby 功能。

于 2013-07-19T21:42:10.260 回答