Я написал простой скрипт-оболочку для повторения команд, когда они не вызвали вызов retry.py. Однако, поскольку я хочу видеть вывод дочерней команды, мне пришлось вытащить некоторые трюки. Это работает нормально для таких программ, как rsync, но другие, такие как scp, применяют дополнительный тест для показа таких вещей, как их счетчик хода.Как настроить группу процессов переднего плана терминала для процесса, который я запускаю под pty?
Код УПП имеет тест, который широко:
getpgrp() == tcgetpgrp(STDOUT_FILENO);
Который терпит неудачу, когда я бегу, хотя сценарий обертку. Как вы можете видеть, с моим простым тестом tty_test.c случае:
./tty_tests
isatty reports 1
pgrps are 13619 and 13619
и:
./retry.py -v -- ./tty_tests
command is ['./tty_tests']
isatty reports 1
pgrps are 13614 and -1
child finished: rc = 0
Ran command 1 times
Я попытался с помощью tcsetpgrp(), которая заканчивается как IOCTL на PTY Fd, но что приводит к -EINVAL для ptys. Я бы предпочел продолжать использовать подпроцесс Python, если это вообще возможно, или для этого требуется вручную fork/execve'ing?
Я дал эту попытку, и это не имеет никакого эффекта: > retry.py -v - ~/mysrc/retry.git/tty_tests command is ['/home/ajb/mysrc/retry.git/tty_tests '] isatty reports 1 pgrps are 28268 и -1 ребенок закончил: rc = 0 Ran command 1 раз – stsquad
Не могли бы вы вставить код? –
OH! Я только заметил, что вы дали ссылку на retry.py в своем вопросе. Я думал, что это просто stackoverflow, пытающийся быть полезным и создающий ссылку из чего-то похожего на имя хоста. Я взгляну. –