在单引号中传递 Python 列表
Passing Python list in single quote
我有一段如下所示的代码,用于将 IP 地址列表发送到 API 调用。
body = {'cID': id, 'dbType': params['db-type'].upper(), 'cidrList': eval(params['--cidr-list'])}
print(json.dumps(body))
conn.request("POST", "/Link/to/API", body=json.dumps(body), headers=header)
check_resp(200)
logger.info("Rules changed successfully")
但是,当我使用以下参数调用此代码时,它失败了。
--cidr-list ['10.20.0.0/32','10.30.0.0/32']
当我使用下面的时它有效。
--cidr-list [\"10.20.0.0/32\",\"10.30.0.0/32\"]
所以基本上当我使用 \"
来包装列表的每个项目时,它被解析为单引号。如何更改代码以使其接受输入 1?我是 Python 的新手,如果您也能解释一下它背后的逻辑,我将不胜感激。提前致谢。
您需要转义单引号,因为它们也被 shell 使用。
--cidr-list [\'10.20.0.0/32\',\'10.30.0.0/32\']
最好的方法是将整个论点放在引号中。
--cidr-list "['10.20.0.0/32','10.30.0.0/32']"
or
--cidr-list '["10.20.0.0/32","10.30.0.0/32"]'
顺便说一句,你应该使用 ast.literal_eval()
而不是 eval()
。
不要将 Python 知识作为使用程序的必要条件。
body = {
'cID': id,
'dbType': params['db-type'].upper(),
'cidrList': params['--cidr-list'].split(',')
}
print(json.dumps(body))
conn.request("POST", "/Link/to/API", json=body, headers=header)
check_resp(200)
logger.info("Rules changed successfully")
然后用
调用脚本
script.py ... --cidr-list 10.20.0.0/32,10.30.0.0/32
所有参数都已经是字符串;您不需要对用户强制使用 Python 字符串文字语法,逗号分隔的字符串足以处理成 CIDR 地址列表,而无需对用户强制使用 Python 列表语法.
我有一段如下所示的代码,用于将 IP 地址列表发送到 API 调用。
body = {'cID': id, 'dbType': params['db-type'].upper(), 'cidrList': eval(params['--cidr-list'])}
print(json.dumps(body))
conn.request("POST", "/Link/to/API", body=json.dumps(body), headers=header)
check_resp(200)
logger.info("Rules changed successfully")
但是,当我使用以下参数调用此代码时,它失败了。
--cidr-list ['10.20.0.0/32','10.30.0.0/32']
当我使用下面的时它有效。
--cidr-list [\"10.20.0.0/32\",\"10.30.0.0/32\"]
所以基本上当我使用 \"
来包装列表的每个项目时,它被解析为单引号。如何更改代码以使其接受输入 1?我是 Python 的新手,如果您也能解释一下它背后的逻辑,我将不胜感激。提前致谢。
您需要转义单引号,因为它们也被 shell 使用。
--cidr-list [\'10.20.0.0/32\',\'10.30.0.0/32\']
最好的方法是将整个论点放在引号中。
--cidr-list "['10.20.0.0/32','10.30.0.0/32']"
or
--cidr-list '["10.20.0.0/32","10.30.0.0/32"]'
顺便说一句,你应该使用 ast.literal_eval()
而不是 eval()
。
不要将 Python 知识作为使用程序的必要条件。
body = {
'cID': id,
'dbType': params['db-type'].upper(),
'cidrList': params['--cidr-list'].split(',')
}
print(json.dumps(body))
conn.request("POST", "/Link/to/API", json=body, headers=header)
check_resp(200)
logger.info("Rules changed successfully")
然后用
调用脚本script.py ... --cidr-list 10.20.0.0/32,10.30.0.0/32
所有参数都已经是字符串;您不需要对用户强制使用 Python 字符串文字语法,逗号分隔的字符串足以处理成 CIDR 地址列表,而无需对用户强制使用 Python 列表语法.