Ho scritto un semplice script di wrapper per ripetere i comandi quando falliscono chiamati retry.py. Comunque, visto che voglio vedere l'output del comando figlio, ho dovuto fare alcuni trucchi. Funziona bene per programmi come rsync ma altri come scp applicano test aggiuntivi per mostrare cose come il loro indicatore di avanzamento.Come si imposta il gruppo di processi in primo piano del terminale per un processo eseguito con una pty?
Il codice SCP ha un test che è in linea di massima:
getpgrp() == tcgetpgrp(STDOUT_FILENO);
che non riesce quando si esegue anche se lo script wrapper. Come si può vedere con il mio semplice caso di test tty_test.c:
./tty_tests
isatty reports 1
pgrps are 13619 and 13619
e:
./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
Ho provato con il tcsetpgrp(), che finisce per essere un IOCTL sulle FD pty, ma che risultati in -EINVAL per ptys. Preferirei continuare a utilizzare il macchinario di sottoprocesso Python se possibile o è necessario eseguire manualmente fork/execveing per questo?
Ho provato e non ha alcun effetto: > retry.py -v - ~/mysrc/retry.git/tty_tests comando è ['/home/ajb/mysrc/retry.git/tty_tests '] report isatty 1 pgrps sono 28268 e -1 figlio terminato: rc = 0 comando Ran 1 volte – stsquad
Potresti incollare del codice completo? –
OH! Ho appena notato che hai fornito un link a retry.py nella tua domanda. Avevo pensato che fosse semplicemente lo stackoverflow che cercava di essere utile e creare un collegamento con qualcosa che somigliava a un nome host. Darò un'occhiata. –