Si engendro un nuevo subprocess
en python con un comando dado (supongamos que comienzo el intérprete de python con el comando python
), ¿cómo puedo enviar datos nuevos al proceso (a través de STDIN)?¿Mantiene vivo un subproceso y sigue dándole comandos? Python
Respuesta
Utilice el módulo estándar subprocess. Utiliza subprocess.Popen() para iniciar el proceso, y se ejecutará en segundo plano (es decir, al mismo tiempo que su programa Python). Cuando llame a Popen(), probablemente desee establecer los parámetros stdin, stdout y stderr para subprocesar.PIPE. Luego puede usar los campos stdin, stdout y stderr en el objeto devuelto para escribir y leer datos.
No comprobado código de ejemplo:
from subprocess import Popen, PIPE
# Run "cat", which is a simple Linux program that prints it's input.
process = Popen(['/bin/cat'], stdin=PIPE, stdout=PIPE)
process.stdin.write(b'Hello\n')
process.stdin.flush()
print(repr(process.stdout.readline())) # Should print 'Hello\n'
process.stdin.write(b'World\n')
process.stdin.flush()
print(repr(process.stdout.readline())) # Should print 'World\n'
# "cat" will exit when you close stdin. (Not all programs do this!)
process.stdin.close()
print('Waiting for cat to exit')
process.wait()
print('cat finished with return code %d' % process.returncode)
Digamos que necesito varios procesos ejecutándose a la vez. ¿Es una mejor idea generar muchos subprocesos con 'Popen()', o con 'fork'? – n0pe
Popen hace fork los procesos. Solo se trata de si desea realizar el fork de nivel bajo usted mismo o si lo desea envuelto en una biblioteca de nivel superior. El resultado final es exactamente el mismo. –
¿Entonces varios Popens concurrentes no empantanarán el sistema? Gracias, intentaré esto. – n0pe
Un túnel creado por Subprocess para disparar varios comandos no se puede mantener activo. para lograr esto puedes mirar paramiko, para otras cosas como subproceso stdin, stdout, stderr puedes ir a través de este enlace python subprocess, ya que este es tu primer proyecto python es mejor que leas y pruebes cosas.
No.
Si desea enviar comandos a un subproceso, cree un pty y luego bifurque el subproceso con un extremo de la unidad adjunta a su STDIN.
Aquí hay un fragmento de algunos de mi código:
RNULL = open('/dev/null', 'r')
WNULL = open('/dev/null', 'w')
master, slave = pty.openpty()
print parsedCmd
self.subp = Popen(parsedCmd, shell=False, stdin=RNULL,
stdout=WNULL, stderr=slave)
En este código, el PTY está unido a stderr porque recibe mensajes de error en lugar de envío de comandos, pero el principio es el mismo.
No use pty.openpty() con subproceso, eso es demasiado complejo. Utilice el subproceso.PIPE y deje que el módulo de subproceso se encargue de ello. (Además de ser más simple y más estándar, usará una tubería, que es más liviana que un PTY). – user9876
- 1. ¿XForms sigue siendo un estándar en vivo?
- 2. Subproceso FFMPEG y Python
- 3. Python Ejecutar un subproceso de daemon y leer stdout
- 4. subproceso python que utiliza el subproceso de importación
- 5. Python genera un subproceso secundario, se separa y sale
- 6. Llamar a un subproceso python como daemon y salir
- 7. Python subproceso de Bash: llaves
- 8. Subproceso de python persistente
- 9. Enviando SIGINT a un subproceso de python
- 10. argumentos de Python subproceso
- 11. Python subproceso Ayuda
- 12. En Python 2.5, ¿cómo elimino un subproceso?
- 13. La ejecución de subproceso de Python sin abrir comandos de Windows
- 14. subproceso python con shell = Verdadero: redirecciones y subproceso independiente de plataforma que mata
- 15. Ejecutar comandos secuencialmente en Python
- 16. Qué es un subproceso de python
- 17. Detener/destruir un subproceso
- 18. Subproceso de Python. Salida de salida y asíncrona
- 19. ¿Mantiene vivo un administrador de persistencia JDO en lugar de cerrarlo?
- 20. python getoutput() equivalente en el subproceso
- 21. Python: ¿Cómo redirigir la salida con subproceso?
- 22. Uso del comodín del subproceso de Python
- 23. Subproceso de Python en paralelo
- 24. ¿Mantiene un diccionario grande en memoria para Django-Python?
- 25. Python sigue los redireccionamientos y luego descarga la página?
- 26. en vivo ('clic') y rendimiento
- 27. Cómo utilizar subproceso popen Python
- 28. ¿Cómo pasar una variable por nombre a un subproceso en Python?
- 29. ¿El opérfilo aún está vivo y bien?
- 30. Salida del subproceso Python en Windows?
si se trata de una concha desea automatizar la interacción con, 'pexpect' es ideal para este tipo de cosas. – wim