Ответ 1
Вы можете использовать:
sys.stdin = open('/dev/tty')
answer = raw_input('Commit anyway? [N/y] ')
if answer.strip().lower().startswith('y'):
...
git commit
вызывает python .git/hooks/pre-commit
:
% ps axu
...
unutbu 21801 0.0 0.1 6348 1520 pts/1 S+ 17:44 0:00 git commit -am line 5a
unutbu 21802 0.1 0.2 5708 2944 pts/1 S+ 17:44 0:00 python .git/hooks/pre-commit
Внутри /proc/21802/fd
(в этом окне Linux) показано состояние дескрипторов файла для процесса с PID 21802 (процесс pre-commit
):
/proc/21802/fd:
lrwx------ 1 unutbu unutbu 64 2011-09-15 17:45 0 -> /dev/null
lrwx------ 1 unutbu unutbu 64 2011-09-15 17:45 1 -> /dev/pts/1
lrwx------ 1 unutbu unutbu 64 2011-09-15 17:45 2 -> /dev/pts/1
lr-x------ 1 unutbu unutbu 64 2011-09-15 17:45 3 -> /dev/tty
lr-x------ 1 unutbu unutbu 64 2011-09-15 17:45 5 -> /dev/null
Таким образом, pre-commit
было порождено с sys.stdin
, указывающим на /dev/null
.
sys.stdin = open('/dev/tty')
перенаправляет sys.stdin
в открытую дескриптор файла, из которого может читаться raw_input
.