Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中进行真正廉价的命令行解析?_Python_Ruby_Parsing_Command Line Arguments - Fatal编程技术网

如何在Python中进行真正廉价的命令行解析?

如何在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将变为零

我一直在大量使用这个答案。这是伟大的,为了我的目的,总是我需要的

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

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

$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")