python 中的通用命令行生成器
generic command line generator in python
python 中是否有通用的命令行生成器?我的意思是类似于 argparse 但具有相反功能的东西。 argparse 允许您定义各种参数,然后将给定的命令行字符串解析为这些参数的值。我需要一些可以让你定义各种参数的东西,比如 argparse,但是给定一个参数字典,值对将生成一个命令行字符串。
示例:
gencmdline = CmdlineGenerator()
gencmdline.add_argument('-f', '--foo')
gencmdline.add_argument('bar')
gencmdline.add_argument('phi')
gencmdline.gen_cmdline(phi='hello', bar=1, foo=2) returns:
"1 hello -f 2"
gencmdline.gen_cmdline(phi='hello', bar=1) returns:
"1 hello"
gencmdline.gen_cmdline(phi='hello', foo=2) raise exception because positional argument bar is not specified.
我假设您想使用 call
之类的东西并向命令传递一组关键字。
from subprocess import call
def get_call_array(command=command,**kwargs):
callarray = [command]
for k, v in self.kwargs.items():
callarray.append("--" + k)
if v:
callarray.append(str(v))
return callarray
call(get_call_array("my_prog",height=5,width=10,trials=100,verbose=None))
#calls: my_prog --height 5 --width 10 --trials 100 --verbose
当然,如果你有一本字典,你所有的参数,就更容易了:
def get_call_array_from_dict(command,options_dict):
callarray=[command]
for k,v in options_dict.items():
callarray.append("--" + str(k))
if v:
callarray.append(str(v))
return callarray
常规 parser
定义生成的 Actions
中可能有足够的信息来完成这项工作。
参与你的例子:
In [122]: parser=argparse.ArgumentParser()
In [123]: arglist = []
In [124]: arg1 = parser.add_argument('-f','--foo')
In [126]: arglist.append(arg1)
In [128]: arg2=parser.add_argument('bar')
In [129]: arglist.append(arg2)
In [131]: arg3=parser.add_argument('phi')
In [132]: arglist.append(arg3)
In [133]: arglist
Out[133]:
[_StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None),
_StoreAction(option_strings=[], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None),
_StoreAction(option_strings=[], dest='phi', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)]
add_argument
创建一个 Action
对象(实际上基于 action
类型的子类),具有默认属性或您使用参数指定的属性。
在这个例子中,我将它们都收集为变量,arg1
和列表的元素。此 repr
中未显示其他属性。您可以在交互式解释器中探索这些内容。
从你的字典,dict(phi='hello', bar=1, foo=2)
和这个列表你可以推断出带有 dest='foo'
的参数有一个选项字符串(-f
或 --foo
),以及其他一切是默认值(nargs=None
是默认的 1 个参数)。 dest='bar'
是空 option_strings
的位置。您必须小心并注意 bar
出现在 phi
.
之前
parser._actions
是相同的动作列表,加上-h
。
python 中是否有通用的命令行生成器?我的意思是类似于 argparse 但具有相反功能的东西。 argparse 允许您定义各种参数,然后将给定的命令行字符串解析为这些参数的值。我需要一些可以让你定义各种参数的东西,比如 argparse,但是给定一个参数字典,值对将生成一个命令行字符串。
示例:
gencmdline = CmdlineGenerator()
gencmdline.add_argument('-f', '--foo')
gencmdline.add_argument('bar')
gencmdline.add_argument('phi')
gencmdline.gen_cmdline(phi='hello', bar=1, foo=2) returns:
"1 hello -f 2"
gencmdline.gen_cmdline(phi='hello', bar=1) returns:
"1 hello"
gencmdline.gen_cmdline(phi='hello', foo=2) raise exception because positional argument bar is not specified.
我假设您想使用 call
之类的东西并向命令传递一组关键字。
from subprocess import call
def get_call_array(command=command,**kwargs):
callarray = [command]
for k, v in self.kwargs.items():
callarray.append("--" + k)
if v:
callarray.append(str(v))
return callarray
call(get_call_array("my_prog",height=5,width=10,trials=100,verbose=None))
#calls: my_prog --height 5 --width 10 --trials 100 --verbose
当然,如果你有一本字典,你所有的参数,就更容易了:
def get_call_array_from_dict(command,options_dict):
callarray=[command]
for k,v in options_dict.items():
callarray.append("--" + str(k))
if v:
callarray.append(str(v))
return callarray
常规 parser
定义生成的 Actions
中可能有足够的信息来完成这项工作。
参与你的例子:
In [122]: parser=argparse.ArgumentParser()
In [123]: arglist = []
In [124]: arg1 = parser.add_argument('-f','--foo')
In [126]: arglist.append(arg1)
In [128]: arg2=parser.add_argument('bar')
In [129]: arglist.append(arg2)
In [131]: arg3=parser.add_argument('phi')
In [132]: arglist.append(arg3)
In [133]: arglist
Out[133]:
[_StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None),
_StoreAction(option_strings=[], dest='bar', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None),
_StoreAction(option_strings=[], dest='phi', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)]
add_argument
创建一个 Action
对象(实际上基于 action
类型的子类),具有默认属性或您使用参数指定的属性。
在这个例子中,我将它们都收集为变量,arg1
和列表的元素。此 repr
中未显示其他属性。您可以在交互式解释器中探索这些内容。
从你的字典,dict(phi='hello', bar=1, foo=2)
和这个列表你可以推断出带有 dest='foo'
的参数有一个选项字符串(-f
或 --foo
),以及其他一切是默认值(nargs=None
是默认的 1 个参数)。 dest='bar'
是空 option_strings
的位置。您必须小心并注意 bar
出现在 phi
.
parser._actions
是相同的动作列表,加上-h
。