https://foro.gambas-es.org/viewtopic.php?f=1&t=1660
-----------------------------------
destroyer
Jueves, 09 Junio 2011, 19:15

Ejecutar Programa Con SHELL/EXEC Y Responder A Pregunta De Dicho Programa
-----------------------------------
Necesito ejecutar un programa de esta forma (O bien con EXEC o SHELL):

[code linenumbers=false syntax=gambas]
SHELL "programa parametros" WAIT TO variable
[/code]

el problema que tengo es que dicho programa realiza dos preguntas en el promt a las cuales hay que responder Y o N. Que yo sepa dicho programa no tiene ninguna opcion de decirle "assume Y o assume N". No se si existe alguna forma desde gambas de responder a dichas preguntas sin que el usuario tenga que pulsar nada, asumiendo que siempre dichos valores seran los mismos para todas las ejecuciones de ese programa.

Y si no se puede con gambas.....¿como puedo resolver esto? (si es que se puede)

gracias


-----------------------------------
soplo
Jueves, 09 Junio 2011, 19:45

Re: Ejecutar Programa Con SHELL/EXEC Y Responder A Pregunta De Dicho Programa
-----------------------------------
Hola

shell admite dos formatos. El que tu has usado sirve para volcar el resultado en un string pero puedes usarlo de otra forma

[code linenumbers=false syntax=gambas]Private P as process 'declarada a nivel de clase
Private Mensaje as string 

P=shell "programa parámetros" for read write as Proceso 'con esto abres el stream.

public sub Proceso_Read() 'este evento salta al recibir datos que envía el proceso (cosas que escribe)
read #last, Mensaje,len(Mensaje)
print #p,"y" 'enviarle un YES
end

public sub Proceso_Kill() 'cuando el proceso termina
print Mensaje
end[/code]

Debe ser algo así. Habría que probarlo, no lo he hecho nunca.


-----------------------------------
destroyer
Viernes, 10 Junio 2011, 06:28

Re: Ejecutar Programa Con SHELL/EXEC Y Responder A Pregunta De Dicho Programa
-----------------------------------
gracias soplo lo pruebo y comento el resultado.


-----------------------------------
jsbsan
Viernes, 10 Junio 2011, 08:13

Re: Ejecutar Programa Con SHELL/EXEC Y Responder A Pregunta De Dicho Programa
-----------------------------------
Puede hacerse de otra forma, usando el redireccionamiento "<" (Redirección de entrada)


[quote]Redirección de entrada: un comando que necesita datos de entrada los toma de un fichero.


Ejemplo: more, mostraba un archivo poco a poco

$more <fichero.txt

nos muestra el archivo fichero.txt, pagina a pagina

El redireccionamiento de entrada se usa con comando de “filtro”, que en principo, estan destinados a trabajar con lo que tu le mandes.


Otro por ejemplo el grep: buscar texto dentro de lo que lo envies ..

grep palabra_a_buscas <fichero.txt[/quote]


ver mi pagina https://sites.google.com/site/fpoprogramadorsistemas/redireccionamiento para mas detalles.

Nota:
El comando tiene que "soportar" la entrada/salida standard, sino no te funcionara (normalmente los comandos de gnu/linux, si lo soportan).


-----------------------------------
destroyer
Viernes, 10 Junio 2011, 22:06

Re: Ejecutar Programa Con SHELL/EXEC Y Responder A Pregunta De Dicho Programa
-----------------------------------
He probado las 2 opciones y ninguna funciona. En gambas he probado esto:

[code linenumbers=false syntax=gambas]
Public hProcess As Process

Public Sub Form_Open()
      hProcess = Shell "ls -l" For Read Write As "Process"
End

Public Sub Process_Read()
  Dim sLine As String
  Read #hProcess, sLine, -256
  Print sLine
  Print #hProcess, "Y"
End
[/code]

Y siempre me da ERROR "tuberia rota"

¿Alguna Idea?


-----------------------------------
soplo
Viernes, 10 Junio 2011, 22:56

Re: Ejecutar Programa Con SHELL/EXEC Y Responder A Pregunta De Dicho Programa
-----------------------------------
tendré que probarlo. Te diré algo mañana.


-----------------------------------
razaAztk
Sabado, 11 Junio 2011, 08:00

Re: Ejecutar Programa Con SHELL/EXEC Y Responder A Pregunta De Dicho Programa
-----------------------------------
Pss yo creo que como ls no necesita de ningana entrada de información éste se ejecuta y termina. Por lo que ya no es posible enviarle información. El por ello de tuberia rota.

Mejor has la prueba con otro comando que espere data de la entrada standard.

Saludos!


