Foros del Web » Programando para Internet » PHP »

Llamar a un programa con "proc_open" y e interactuar con él desde otro script

Estas en el tema de Llamar a un programa con "proc_open" y e interactuar con él desde otro script en el foro de PHP en Foros del Web. Hola majos: Básicamente lo que necesito es lo siguiente... Un script PHP ejecutaría un programa mediante "proc_open ()". Finalizado dicho script, el comando seguiría en ...
  #1 (permalink)  
Antiguo 25/07/2008, 12:55
Avatar de Negora  
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 20 años, 8 meses
Puntos: 5
Llamar a un programa con "proc_open" y e interactuar con él desde otro script

Hola majos:

Básicamente lo que necesito es lo siguiente... Un script PHP ejecutaría un programa mediante "proc_open ()". Finalizado dicho script, el comando seguiría en ejecución leyendo lo que le llegase por STDIN. Mediante otros scripts, se debería de poder interactuar con ese proceso en ejecución.

Para lograr algo así se me había ocurrido usar un fichero FIFO como STDIN, de tal modo que cada vez que se escriba en dicho fichero, sea desde el script que sea y en cualquier momento, el programa en ejecución recibiría ese parámetro como si lo introdujéramos a mano desde la consola. Consistiría básicamente en adaptar un programa de línea de comandos a una interface web. El programa está diseñado para funcionar mediante órdenes introducidas como texto y finalizadas con "\n".

He probado lo siguiente:

Código:
	// Uso "start" ya que me encuentro en un entorno Windows y es la única
	manera que conozco de poder ejecutar un comando sin que el script espere
	a su finalización.

	$cmd = "start \"\" /b myprogram.exe";
	

	// Redirijo la entrada a un fichero creado para la ocasión.
	$arr_desc = array (
		0 => array ("file", "c:/stdin_file", "r")
	);
	

	// Creo el proceso y lo finalizo (pero "myprogram.exe" sigue ejecutándose).
	$rsc_proc = proc_open ($cmd, $arr_desc, $arr_pipe);
	if (is_resource ($rsc_proc)) {
		$retval = proc_close ($rsc_proc);
	}


	// Abro en modo escritura el archivo y le indico el comando "test" junto con
	// un retorno de carro (necesario para que lo lea).
	$rsc_file = fopen ("c:/stdin_file", "a+");
	fwrite ($rsc_file, "test\n");
	fclose ($rsc_file);

Usando este ejemplo parece que el fichero no actúa como un fichero FIFO. ¿Se os ocurre una razón?

Otra idea que había tenido era "recuperar" desde otro script el proceso, usando comandos del propio SO y ejecutándolos mediante "proc_open"... ¿Pero es eso posible? ¿Se os ocurre otro método?

Un saludo y muchas gracias.
  #2 (permalink)  
Antiguo 26/07/2008, 03:04
Avatar de Negora  
Fecha de Ingreso: agosto-2003
Mensajes: 122
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Llamar a un programa con "proc_open" y e interactuar con él desde otro scr

Bueno, finalmente he dejado de lado la idea de usar un fichero FIFO y lo que estoy haciendo es pasarle las instrucciones a través del descriptor STDIN. Dentro del mismo script de llamada funciona perfectamente.

Lo que ahora necesitaría saber es ¿Se le ocurre a alguien una manera de recuperar un proceso del sistema desde otro script? Porque con "proc_open ()" sólo puedo crear uno nuevo.


PD: O eso o recuperar el STDIN hacia el programa.

Última edición por Negora; 26/07/2008 a las 04:06
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:14.