
Tengo problemas para enviar shutdown -h 0
a un lxc
contenedor de Debian (es decir, ejecutar este comando en lxc) con el pexpect
módulo de Python (en un script de Python). En este módulo, el usuario puede "esperar" (= esperar la salida del proceso) una determinada subcadena, entre otras EOF, lo que me lleva a la pregunta para poder depurar más por qué no se reconoce EOF en la salida. Necesito saber qué puedo "esperar" después de la finalización del proceso para poder esperar a que finalice. No puedo simplemente esperar el proceso porque el pexpect
módulo oculta funciones sin bloqueo para eso.
El pexpect
módulo (verhttp://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expectpara más detalles) envuelve la recepción de EOF en la llamada al sistema de lectura en un tipo (pato) y la hace utilizable en pexpect.expect
(una encapsulación de posible salida/retroalimentación de un proceso).
Me he estado preguntando eso porque ls
se espera que algunos procesos terminen con EOF, es decir, el pexpect
sentido de EOF (ejemplo enhttp://pexpect.sourceforge.net/pexpect.html).
Respuesta1
En lugar de ejecutar este shutdown -h 0
comando, sugeriría ejecutarlo halt
o ejecutarlo desde el host lxc-shutdown -n <name>
.
Respuesta2
EOF indica que no se esperan más entradas sobre un recurso que posiblemente proporcione una cantidad infinita de datos (por ejemplo, una secuencia). Esta situación a menudo se expresa escribiendo un solo carácter en la secuencia (que será definido por el sistema subyacente (probablemente un sistema operativo o un entorno de ejecución)).
Como los procesos utilizan flujos para la comunicación entre procesos, necesitan indicar los límites de su salida y los procesos de envío deben indicar los límites de su entrada utilizando EOF. Es muy seguro que el sistema subyacente enviará esta entrada y salida a sus propios mecanismos de manejo de procesos, haciendo que EOF esté disponible para su evaluación en el programa/en el sistema.
Nota sobre pexpect
el caso de uso en la pregunta: shutil.pexpect
no parece adecuado para copiar archivos de un lxc
contenedor. Se atascó y el desplazamiento de tiempo de la pexpect
salida causa confusión.