example español and python command-line subprocess popen frontend

español - Subproceso Python e interacción con el usuario.



subprocess python 3 example (1)

Estoy trabajando en una interfaz gráfica de usuario en Python 2.6 y, por lo general, es bastante simple: utiliza subprocess.call() o subprocess.Popen() para emitir el comando y esperar a que finalice o reaccione ante un error. ¿Qué hace si tiene un programa que se detiene y espera la interacción del usuario? Por ejemplo, ¿el programa podría detenerse y pedirle al usuario una ID y contraseña o cómo manejar un error?

c:/> parrot Military Macaw - OK Sun Conure - OK African Grey - OK Norwegian Blue - Customer complaint! (r) he''s Resting, (h) [Hit cage] he moved, (p) he''s Pining for the fjords

Hasta ahora, todo lo que he leído le dice cómo leer toda la salida de un programa solo después de que haya terminado, no cómo manejar la salida mientras el programa aún se está ejecutando. No puedo instalar nuevos módulos (esto es para un LiveCD) y trataré con las entradas del usuario más de una vez.


Echa un vistazo al manual de subprocess . Tiene opciones con subprocess para poder redirigir el stdin , stdout y stderr del proceso que está llamando a su propio.

from subprocess import Popen, PIPE, STDOUT p = Popen([''grep'', ''f''], stdout=PIPE, stdin=PIPE, stderr=STDOUT) grep_stdout = p.communicate(input=''one/ntwo/nthree/nfour/nfive/nsix/n'')[0] print grep_stdout

También puede interactuar con un proceso línea por línea. Dado esto como prog.py :

import sys print ''what is your name?'' sys.stdout.flush() name = raw_input() print ''your name is '' + name sys.stdout.flush()

Puedes interactuar con él línea por línea a través de:

>>> from subprocess import Popen, PIPE, STDOUT >>> p = Popen([''python'', ''prog.py''], stdout=PIPE, stdin=PIPE, stderr=STDOUT) >>> p.stdout.readline().rstrip() ''what is your name'' >>> p.communicate(''mike'')[0].rstrip() ''your name is mike''