为了账号安全,请及时绑定邮箱和手机立即绑定

如何将外部变量传递给带有变量名的python程序?

如何将外部变量传递给带有变量名的python程序?

明月笑刀无情 2022-01-18 17:34:14
我想用变量名将外部变量传递给我的 python 脚本。如果我像这样通过:program.py 'var1' 'var2' 'var3'那么问题是:如果 var2 错误地是空格(不带引号),那么 python 脚本将 var3 作为值而不是 var2。传递变量的预期方法是:program.py a=var1 b=var2 c=var3因此,如果 var2 是空格(不带引号),python 程序只会将 var2 值作为空格,不会选择 var3 而不是 var2。
查看完整描述

2 回答

?
慕的地6264312

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 选项中。


这就是为什么更推荐只解析命令行选项的原因。


查看完整回答
反对 回复 2022-01-18
?
ABOUTYOU

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')


查看完整回答
反对 回复 2022-01-18
  • 2 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信