2 回答
TA贡献1817条经验 获得超6个赞
您是否希望接受命令行参数或使用命令行参数来填充程序中已有的变量?
对于前者,使用argparse,很容易解析<opt> <arg>和<opt>=<arg>格式。
但是,对于后者,您可以通过以下示例执行此操作,但这是一个安全漏洞:
>>> exec('a=3')
>>> a
3
>>> import sys
>>> cli_args = sys.argv[1:]
>>> exec(cli_args[0])
>>>
基本上,您可以使用exec()python 中的函数来执行类似的字符串语句'a=4',但这样做会允许在您的程序中注入代码。如果有人知道您exec()在 cli args 上使用,他们可能会将恶意代码放入将由您的程序执行的 cli 选项中。
这就是为什么更推荐只解析命令行选项的原因。
TA贡献1812条经验 获得超5个赞
[root]# cat t.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('v1')
parser.add_argument('v2')
args = parser.parse_args()
print ('value of variable a is:',args.v1)
print ('value of variable b is:',args.v2)
执行上面的脚本:
[root]# python3 t.py v1='abc' v2=3
value of variable v1 is: v1=abc
value of variable v2 is: v2=3
同样使用python2:
[root]# python t.py v1=abc v2=3
('value of variable v1 is:', 'v1=abc')
('value of variable v2 is:', 'v2=3')
添加回答
举报