python TypeError没有足够的格式字符串参数

时间:2012-07-09 14:52:42

标签: python regex sed fabric

尝试使用python fabric更新文件

run('sed -i s/jahil/%s/g /etc/nginx/sites-enabled/%s' % (account))

run('sed -i "s/jahil/%s/g" /etc/nginx/sites-enabled/%s' % (account))

错误:

TypeError: not enough arguments for format string

有什么想法吗?非常感谢!

3 个答案:

答案 0 :(得分:5)

错误告诉您问题:您的字符串中有两个%s占位符,但只有一个值。我假设你想在两个地方使用相同的值。在这种情况下:

run('sed -i s/jahil/%s/g /etc/nginx/sites-enabled/%s' % (account, account))

或者,等效地,使用字典,以便我们可以使用命名占位符:

run('sed -i s/jahil/%(a)s/g /etc/nginx/sites-enabled/%(a)s' % {"a": account})

完全用Python完成这种字符串替换很容易;你可能会考虑这样做,而不是炮轰。

答案 1 :(得分:2)

就像错误所说的那样,你说你拥有的参数数量与你提供的数量之间存在不匹配。一个自然错误,因为你希望它们是相同的:

run('sed -i "s/jahil/%s/g" /etc/nginx/sites-enabled/%s' % (account, account))

答案 2 :(得分:1)

您的格式字符串中有两个 %s,因此您构建的字符串希望获得两个 string个参数。

除非accounts是两个字符串的元组,否则您将收到此消息。

你应该有这样的东西:

   % (account, something_else)

如果这两个字符串都需要account,那么% (account, account)就可以了。