假设我有模块myscript.py; 该模块是生产代码,通常称为%dir%>python myscript.py foo bar
。
我想扩展它以接受关键字参数。我知道我可以使用下面的脚本接受这些参数,但是不幸的是,必须使用
%dir%>python myscript.py main(foo, bar)
。
我知道我可以使用该argparse
模块,但是我不确定该怎么做。
import sys
def main(foo,bar,**kwargs):
print 'Called myscript with:'
print 'foo = %s' % foo
print 'bar = %s' % bar
if kwargs:
for k in kwargs.keys():
print 'keyword argument : %s' % k + ' = ' + '%s' % kwargs[k]
if __name__=="__main__":
exec(''.join(sys.argv[1:]))
如果您希望像在main函数中那样传递关键字参数key=value
,则可以这样做:
import sys
def main(foo, bar, *args):
print "Called my script with"
print "foo = %s" % foo
print "bar = %s" % bar
for arg in args:
k = arg.split("=")[0]
v = arg.split("=")[1]
print "Keyword argument: %s = %s" % (k, v)
if __name__ == "__main__":
if len(sys.argv) < 3:
raise SyntaxError("Insufficient arguments.")
if len(sys.argv) != 3:
# If there are keyword arguments
main(sys.argv[1], sys.argv[2], *sys.argv[3:])
else:
# If there are no keyword arguments
main(sys.argv[1], sys.argv[2])
一些例子:
$> python my_file.py a b x=4
Called my script with
foo = a
bar = b
Keyword argument: x = 4
$> python my_file.py foo bar key=value
Called my script with
foo = foo
bar = bar
Keyword argument: key = value
但是,这假定键和值之间没有空格,key = value
将不起作用。
如果要查找--argument
各种关键字参数,则应使用argparse
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句