尝试使用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
有什么想法吗?非常感谢!
答案 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)
就可以了。