对于我传递的字符串command
和字符串列表ports
的函数
一个例子:
command = "a b c {iface} d e f"
ports = ["abc", "adsd", "12", "13"]
这些传递给了这个函数,我希望得到多个字符串来替换命令
{iface}
ports
def substitute_interface(command, ports):
t = string.Template(command)
for i in ports:
print t.substitute({iface}=i)
我在标题中收到错误,我做错了什么?
答案 0 :(得分:3)
您有两个错误:
{iface}
是表达式(具体地说,是包含当前值iface
的集合)。 iface
名称周围的大括号是标记,以告诉替换引擎 有什么东西要替换。要传递该占位符的值,只需提供密钥iface
,最好通过编写t.substitute(iface=i)
。string.Template
不支持该语法,它需要$iface
(或${iface}
如果前者无法使用,但这种情况下您只需使用$iface
)。 str.format
支持此语法,但显然您不想使用它。答案 1 :(得分:2)
来自docs:
$ identifier命名匹配映射键的替换占位符 “标识符”
所以你需要一个$
标志,否则模板将无法找到占位符,然后将iface = p
传递给substitute
函数或字典。
>>> command = "a b c ${iface} d e f" #note the `$`
>>> t = Template(command)
>>> for p in ports:
print t.substitute(iface = p) # now use `iface= p` not `{iface}`
...
a b c abc d e f
a b c adsd d e f
a b c 12 d e f
a b c 13 d e f
如果不进行任何修改,您可以将此字符串"a b c {iface} d e f"
与str.format
:
for p in ports:
print command.format(iface = p)
...
a b c abc d e f
a b c adsd d e f
a b c 12 d e f
a b c 13 d e f