3个令牌的3个参数但没有足够的参数错误

时间:2014-07-27 13:52:00

标签: python fabric

如果我在ubuntu服务器上创建名为Talbot的用户,我可以通过以sudo

运行此命令来手动更改此用户目录的所有权
chown talbot:talbot -R /home/talbot

我尝试通过

在Fabric python脚本的最后一行做同样的事情
 sudo("chown %s:%s -R /home/%s" % new_user,new_user, new_user)

然而,它一直给我这个错误

  sudo("chown %s:%s -R /home/%s" % new_user, new_user,new_user)
TypeError: not enough arguments for format string

你能解释一下这个错误发生的原因吗?

def user_add(new_user, passwd=False):
    """Add new user"""
    with settings(hide('running', 'stdout', 'stderr'), warn_only=True):
        # if is_host_up(env.host):
        if not passwd:
                passwd = generate_passwd()
            if not sudo("useradd -p $(echo '%s' | openssl passwd -1 -stdin) %s" % (passwd, new_user)).failed:
                run('echo "{user} ALL=(ALL:ALL) ALL" >> /etc/sudoers'.format(user=new_user))
                if env.host== '107.XX.XX.XXX': 
                    sudo("mkdir /home/%s" % new_user, warn_only=True)
                    sudo("chown %s:%s -R /home/%s" % new_user,new_user, new_user)

1 个答案:

答案 0 :(得分:2)

您的格式字符串的所有参数都需要包含在一个元组中。而不是

sudo("chown %s:%s -R /home/%s" % new_user,new_user, new_user)

你应该使用

sudo("chown %s:%s -R /home/%s" % (new_user,new_user, new_user))