2012-04-10 8 views
5

exe ​​debería ejecutarse cuando abro la página. El proceso asincrónico necesita ejecutarse.¿Cómo ejecutar un exe de forma asincrónica con dos argumentos en ruby?

¿Hay alguna forma para ejecutar exe de forma asíncrona con dos argumentos en ruby?

He intentado con los comandos de ruby ​​- system(), exec() pero está esperando que el proceso se complete. tengo que empezar a exe con el parámetro no hay necesidad de esperar a que el proceso completo

es cualquier rubygems va a apoyar para mi problema?

Respuesta

7

Puede utilizar Process.spawn y Process.wait2:

pid = Process.spawn 'your.exe', '--option' 

# Later... 
pid, status = Process.wait2 pid 

El programa se ejecuta como un proceso hijo del intérprete. Además de eso, se comportará como si hubiera sido invocado desde la línea de comando.

También puede utilizar Open3.popen3:

require 'open3' 
*streams, thread = Open3.popen3 'your.exe', '--option' 

# Later... 
streams.each &:close 
status = thread.value 

La diferencia principal aquí es que se obtiene acceso a tres IO objetos. Los flujos de entrada, salida y error estándar del proceso se redirigen a ellos, en ese orden.

Esto es ideal si desea consumir la salida del programa o comunicarse con él a través de su flujo de entrada estándar. En su lugar, el texto que normalmente se imprimiría en un terminal estará disponible para su secuencia de comandos.

También obtendrá un hilo que esperará a que el programa termine de ejecutarse, lo cual es conveniente e intuitivo.

1

exec interruptores controlan a un nuevo proceso y nunca vuelven. system crea un subproceso y espera a que termine.

Lo que probablemente desee hacer es fork y luego exec para crear un nuevo proceso sin esperar a que regrese. También puede usar la biblioteca win32ole que podría ser give you more control.

Cuestiones relacionadas