Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.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_Command Line Arguments - Fatal编程技术网

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

Python中作为变量定义的命令行参数,python,command-line-arguments,Python,Command Line Arguments,我试图构造一种模板/包装器脚本,它使用一些未定义的选项调用 > the_script.py --foo=23 --bar=42 --narf=fjoord 然后在其中创建一个名为foo=23、bar=42、narf='fjoord'的变量 怎么做?我尝试使用getopt,但它需要第二个参数,所以我必须定义要获取的选项,当然,我希望能够通过命令行定义变量名。我也试过OptionParser,但不知道如何处理未定义的选项 手动解析sys.argv的方法也是如此,或者可能存在一个模块,它可以做

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

> the_script.py --foo=23 --bar=42 --narf=fjoord
然后在其中创建一个名为foo=23、bar=42、narf='fjoord'的变量

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


手动解析sys.argv的方法也是如此,或者可能存在一个模块,它可以做完全相同的事情吗?

这是一个相对简单的任务,使用ast.literal\u eval和字符串拆分-但前提是您有一个真正定义良好的语法。e、 g.只允许-foo=bar或-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.updated,但我会严肃地建议你不要这样做。

这是一个相对简单的任务,使用ast.literal\u eval和字符串拆分,但前提是你有一个非常好的语法定义。e、 g.只允许-foo=bar或-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.updated,但我会严肃地建议不要这样做。

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

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

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

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

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

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

pythondocopt是一个命令行参数解析模块。看看@anandaseelan-那么所有的命令行参数都需要事先知道…只是好奇-一旦有了命令行选项,您希望对它们做什么?语法始终是-foo=23,还是-foo 23?让脚本依赖其调用来创建它将引用的变量名似乎不是一个好主意。@mgilson我希望有定义良好的语法,比如-foo=23。python-docopt是一个命令行参数解析模块。看看@anandaseelan-那么所有的命令行参数都需要事先知道…只是好奇-一旦有了命令行选项,您希望对它们做什么?语法始终是-foo=23,还是-foo 23?让脚本依赖其调用来创建它将引用的变量名似乎不是一个好主意。@mgilson我希望有定义良好的语法,比如-foo=23.globals.updated就是让php进入大量应用程序的类型bother@gnibbler-就像我说的,我郑重建议不要那样做。找出在这种情况下定义了哪些变量的唯一方法是检查globals字典。。。最好还是留一个单独的dict在身边,然后使用它。我更关心的是隐藏内置内容的可能性。@gnibbler-是的,我想这是公平的。虽然您应该很快发现,对于大多数事情来说,sum是不可调用的错误类型。globals.updated是让php陷入许多错误的类型bother@gnibbler-如我所说,我郑重建议不要这样做。找出在这种情况下定义了哪些变量的唯一方法是检查globals字典。。。最好还是留一个单独的dict在身边,然后使用它。我更关心的是隐藏内置内容的可能性。@gnibbler-是的,我想这是公平的。虽然您应该很快发现,对于大多数情况,求和是不可调用的错误类型。