1

我正在尝试构建一个(一种模板/包装器)脚本,它被一些未定义的选项调用

> the_script.py --foo=23 --bar=42 --narf=fjoord

然后在其中创建一个名为foo=23,bar=42的变量narf='fjoord'

有什么办法呢?我尝试使用getopt,但它需要第二个参数,因此我必须定义要获取的选项,当然,我希望能够通过命令行定义我的变量名。我也尝试OptionParser过,但不确定如何处理未定义的选项。

那么手动解析的方式是sys.argv,还是可能有一个模块,它做同样的事情?

4

2 回答 2

3

用这个。也许你需要一些字符串''括号......

>>python yourfunc.py foo=4 abc=5

import sys 
list=sys.argv[1:]
for i in list:
   exec(i)
于 2013-06-13T12:53:35.107 回答
2

这是一个相对简单的任务ast.literal_eval和字符串拆分——但前提是你有一个非常明确的语法。(例如,仅允许 1 个--foo=bar或1 个--foo bar)。

import argparse
import ast

parser = argparse.ArgumentParser() #allow the creation of known arguments ...

namespace,unparsed = parser.parse_known_args()

def parse_arg(arg):
    k,v = arg.split('=',1)
    try:
        v = ast.literal_eval(v) #evaluate the string as if it was a python literal
    except ValueError:          #if we fail, then we keep it as a string
        pass

    return k.lstrip('-'),v

d = dict(parse_arg(arg) for arg in unparsed)
print(d)

我已将键值对放入字典中。如果您真的希望它们作为全局变量,您可以这样做globals().update(d)——但我强烈建议您不要这样做。

于 2013-06-13T12:39:16.780 回答