En el pasado, siempre he usado el módulo subprocess
para esto. Proporciona una buena API para comunicarse con subprocesos.
Puede usar call(*popenargs, **kwargs)
para bloquear la ejecución de ellos, y creo que el uso de la clase Popen
puede manejar la ejecución asincrónica.
Consulte docs para obtener más información.
En cuanto al uso de os.fork
frente a pty.fork
, ambos dependen en gran medida de la plataforma, y ninguno de ellos funcionará (o al menos se probará) con Windows. El módulo pty
parece ser el más limitado de los dos al leer los documentos. La principal diferencia es el aspecto pseudo terminal. Entonces, si no está dispuesto a diseñar su código de forma tal que pueda usar el módulo subprocess
, probablemente vaya con os.fork
en lugar de pty.fork
.
Entonces, ¿el propósito del juego es mantener al niño IO en una caja separada, en lugar de mezclarlo con los padres stdin/out? Supongo que podrías hacer lo mismo con os.fork y algunos pibes. ¿Este terminal hace algo más que IO? –
Claro, puedes implementar 'pty.fork()' usando 'pty.openpty()' y 'os.fork()' (en realidad puedes verlo en la fuente 'pty.py'). Pero los pseudo-terminales difieren de los tubos, ver http://en.wikipedia.org/wiki/Pseudo_terminal. –
En pty.py veo que incluso el código no os.forkpty en pty.fork usa el dispositivo/dev/pty, por lo que debe haber más que solo un paradigma de entrada/salida. Leí los comentarios en la parte superior del archivo y dicen: "Errores: no se maneja la señal. No establece termios esclavos y tamaño de ventana". Wikipedia no dijo nada sobre que pty esté haciendo algo así ... –