2 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
您是否希望接受命令行參數(shù)或使用命令行參數(shù)來(lái)填充程序中已有的變量?
對(duì)于前者,使用argparse,很容易解析<opt> <arg>和<opt>=<arg>格式。
但是,對(duì)于后者,您可以通過(guò)以下示例執(zhí)行此操作,但這是一個(gè)安全漏洞:
>>> exec('a=3')
>>> a
3
>>> import sys
>>> cli_args = sys.argv[1:]
>>> exec(cli_args[0])
>>>
基本上,您可以使用exec()python 中的函數(shù)來(lái)執(zhí)行類(lèi)似的字符串語(yǔ)句'a=4',但這樣做會(huì)允許在您的程序中注入代碼。如果有人知道您exec()在 cli args 上使用,他們可能會(huì)將惡意代碼放入將由您的程序執(zhí)行的 cli 選項(xiàng)中。
這就是為什么更推薦只解析命令行選項(xiàng)的原因。

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
[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)
執(zhí)行上面的腳本:
[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')
添加回答
舉報(bào)