我想使用变量名将外部变量传递给我的python脚本。
如果我像这样通过:
program.py 'var1' 'var2' 'var3'
然后的问题是:如果var2错误地是空格(不带引号),则python脚本将var3作为值而不是var2。
传递变量的预期方式是:
program.py a=var1 b=var2 c=var3
因此,如果var2是空格(不带引号),则python程序将var2值仅作为空格,而不是选择var3而不是var2。
答案 0 :(得分:1)
您是要接受命令行参数还是要使用命令行参数来填充程序中已经存在的变量?
对于前者,使用argparse,解析<opt> <arg>
和<opt>=<arg>
格式都很容易。
对于后者,您可以通过下面的示例执行此操作,但这是一个安全漏洞:
>>> exec('a=3')
>>> a
3
>>> import sys
>>> cli_args = sys.argv[1:]
>>> exec(cli_args[0])
>>>
基本上,您可以在python中使用exec()
函数来执行诸如'a=4'
之类的字符串语句,但是这样做将允许在程序中注入代码。如果有人知道您在cli参数上使用exec()
,他们可能会将恶意代码放入将由您的程序执行的cli选项中。
这就是为什么建议仅解析命令行选项的原因。
答案 1 :(得分:0)
[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')