In passato ho sempre utilizzato il modulo subprocess
per questo. Fornisce una buona api per comunicare con i sottoprocessi.
È possibile utilizzare call(*popenargs, **kwargs)
per bloccarne l'esecuzione e credo che l'utilizzo della classe Popen
possa gestire l'esecuzione asincrona.
Per ulteriori informazioni, consultare lo docs.
Per quanto riguarda l'utilizzo di os.fork
rispetto a pty.fork
, entrambi sono altamente dipendenti dalla piattaforma e nessuno funzionerà (o almeno è testato) con Windows. Il modulo pty
sembra essere il più vincolato tra i due leggendo i documenti. La principale differenza è l'aspetto pseudo-terminale. Quindi se non sei disposto ad architettare il tuo codice in modo tale da poter usare il modulo subprocess
, probabilmente andrei con os.fork
invece di pty.fork
.
fonte
2009-12-17 15:22:40
Quindi lo scopo della pty è di mantenere l'IO figlio in una casella separata, invece di confonderlo con i genitori stdin/out? Suppongo che potresti fare lo stesso con os.fork e alcuni pibes. Questo terminale fa qualcosa di diverso dall'IO? –
Certo, puoi implementare 'pty.fork()' usando 'pty.openpty()' e 'os.fork()' (in realtà puoi vederlo nella sorgente 'pty.py'). Ma lo pseudo-terminale differisce dalle pipe, vedi http://en.wikipedia.org/wiki/Pseudo_terminal. –
In pty.py vedo che anche il codice non os.forkpty in pty.fork usa il dispositivo/dev/pty, quindi deve esserci più di un paradigma di input/output. Leggo i commenti nella parte superiore del file e dicono: "Bug: nessuna gestione del segnale. Non imposta i termios slave e le dimensioni della finestra". Wikipedia non ha detto nulla su Pty sta facendo cose del genere .. –