我尝试了多种方法来切换用户使用postgres
为fabric
执行还原备份。
这是我目前的代码:
# -*- coding: utf-8 -*-
from datetime import datetime
from fabric.api import run, env, settings, hosts, execute
from fabric.operations import get
...
@hosts(['127.0.0.1'])
def restore_localdb(dump_file):
with settings(user="postgres"):
run('dropdb potato')
run('createdb -E UTF8 -O potato potato')
run('psql -U potato -h localhost potato -W < %s' % dump_file)
def local_clone():
dump_file = execute(backupdb)
execute(restore_localdb, dump_file)
当我假设系统已切换到potato
用户时,我无法理解dropdb potato
句子postgres
密码的提示。
我尝试使用sudo
,但restore_localdb
中的切换内的两个句子必须以postgres
执行。
我也试过了env.user
而没有。还有:
sudo('dropdb potato', user='postgres')
同样的结果。
local
命令对我没用,因为我需要在用户之间切换,而我无法使用local
进行切换。
我只想模仿这些bash命令:
> sudo su - postgres
# I'll write the password for root
> dropdb potato
# The database is finally dropped without any more prompts
有什么想法吗?