Mysql 在 django 中使用 fab 和 curses 恢复数据库
Mysql database restoring with fab and curses in django
@hosts(['localhost'])
def start():
import curses
screen = curses.initscr()
backup_file = db_backup.sql
local("mysql -u %s -p %s < " % (
db_username,db_name) + backup_file)
现在我 运行 这个 fab start
它要求输入密码,我输入密码后屏幕没有反应。
谁能知道这里发生了什么?如果我删除诅咒它工作正常。
local
命令正在提示输入密码。这期望终端模式设置正常,因此如果您按 Enter(发送 ^M
),它会映射到换行符(^J
)。
当您使用 curses.initscr
初始化 curses 时,会更改终端模式,因此映射不会完成。当您调用 getch
.
时,curses 库会执行其 own 映射
如果你按 controlJ 而不是 Enter,那应该可以安抚密码提示在 local
命令中。
由于您的示例没有使用 curses(也许 稍后)您可以省略它,或者将初始化移到您需要使用它的地方。
在任何情况下,您可能无法通过 curses 使 local
命令在脚本中使用密码提示(不假设和依赖特殊设备)。
通过暂停诅咒,它会return到终端。我们可以在哪里完成恢复数据库任务。
@hosts(['localhost'])
def start():
import curses
screen = curses.initscr()
backup_file = db_backup.sql
local("mysql -u %s -p %s < " % (
db_username,db_name) + backup_file)
现在我 运行 这个 fab start
它要求输入密码,我输入密码后屏幕没有反应。
谁能知道这里发生了什么?如果我删除诅咒它工作正常。
local
命令正在提示输入密码。这期望终端模式设置正常,因此如果您按 Enter(发送 ^M
),它会映射到换行符(^J
)。
当您使用 curses.initscr
初始化 curses 时,会更改终端模式,因此映射不会完成。当您调用 getch
.
如果你按 controlJ 而不是 Enter,那应该可以安抚密码提示在 local
命令中。
由于您的示例没有使用 curses(也许 稍后)您可以省略它,或者将初始化移到您需要使用它的地方。
在任何情况下,您可能无法通过 curses 使 local
命令在脚本中使用密码提示(不假设和依赖特殊设备)。
通过暂停诅咒,它会return到终端。我们可以在哪里完成恢复数据库任务。