在Python中作为变量定义的命令行参数

2024-05-29 04:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构造一个(某种模板/包装器)脚本,它是用一些未定义的选项调用的

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

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

怎么做?我尝试使用getopt,但它需要第二个参数,所以我必须定义要获取的选项,当然,我希望能够通过命令行定义变量名。我也尝试了OptionParser,但不知道如何处理未定义的选项。在

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


Tags: the命令行py脚本模板参数定义foo
2条回答

这是一个相对简单的任务,包含ast.literal_eval和字符串拆分,但前提是您有一个真正定义良好的语法。(例如,只允许 foo=bar foo bar中的1个)。在

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),但我强烈建议不要这样做。

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

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

import sys 
list=sys.argv[1:]
for i in list:
   exec(i)

相关问题 更多 >

    热门问题