我正在尝试为postgresql设置python fabric,但无法弄清楚如何在提示符下输入新密码。如何在结构中设置以下内容:
sudo passwd –d postgres
sudo su postgres –c passwd
答案 0 :(得分:1)
解决方案1:
从安全角度来看,我在这里写的是一个糟糕的黑客。 它在命令行上提供密码,因此除了玩具工作之外不应该使用它:
with hide('running', 'stdout', 'stderr'):
run('echo -e "%s\n%s\n" | sudo passwd %s' % (passwd, passwd, user))
PS:此解决方案使用较旧的格式化技术。这不应该让你不喜欢使用新的。
解决方案2:
Passwd期望从stdin输入,你可以改为使用pexpect / expect来专门做这项工作,并且比上面的方法更好,但不是没有它的缺陷。
样本pexpect程序:
child = pexpect.spawn('some command that expects password')
child.expect('Enter password:')
child.sendline('somepassword')
child.expect('Enter password:') --- passwd may ask twice
child.sendline('somepassword')
child.expect(pexpect.EOF, timeout=None)
...