Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Capturar Salida Comando "udp-sender" Gambas 3
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Capturar Salida Comando "udp-sender" Gambas 3 
 
Hola a todos.

Estoy diseñando una aplicación en gambas 3 en el SO Ubuntu 12.04 que utiliza "Udpcast". Concretamente, ejecuto el siguiente comando utilizando Shell:

Shell ["udp-sender","-f","test.txt"]

Necesito mostrar lo que aparece en consola en un TextArea al hacer clic en un botón y que ejecute el comando, pero me está resultando imposible. He usado todo lo que he encontrado en internet
para intentar hacerlo pero no funciona de ninguna forma. Aquí os muestro lo que he intentado hasta ahora:

Forma 1:

Public Sub Button1_Click()

Dim salida As String
Shell ["udp-sender","-f","test.txt"] To salida
TextArea1.Text = salida

End


Con esta forma "salida" no muestra nada, queda vacía, mientras que si hago otro comando como "ls" si que funciona.

Forma 2:

Public Sub Button1_Click()

Dim Proceso as Process
Proceso = Shell ["udp-sender","-f","test.txt"] For Read Write

End

PUBLIC SUB Process_Read()

  DIM sLine AS String

  LINE INPUT #LAST, sLine

  TextArea1.Text = sLine

END


Tampoco hace nada, nisiquiera entra en el método "Process_Read()", creo que esto solo sirve para versiones antiguas de Gambas.
También he probado poniendo sólo Read y sólo Write pero nada. También haciendo el comando directamente sin meterlo en un proceso.


Forma 3:

PRIVATE Proceso AS Process

PUBLIC SUB Button1_Click()
    Proceso = Shell ["udp-sender","-f","test.txt"] For Read Write
END SUB

PUBLIC SUB Process_Error(sData AS String )
  
  TextArea1.Text = sData
END SUB


Lo mismo, este método si que viene incluido en gambas 3 pero tampoco sirve, supongo que es porque no hay ningún error.


Forma 4:

Public Sub Button1_Click()

Dim Proceso as Process
Proceso = Shell ["udp-sender","-f","test.txt"] For Read Write As "Lectura"

End

PUBLIC SUB Lectura_Read()

  DIM sLine AS String

  LINE INPUT #LAST, sLine

  TextArea1.Text = sLine

END

Y esto tampoco, no entra en el método "Lectura_Read()" y tampoco soy capaz de hacer nada con "Lectura".

Por último también he intentado guardar la salida en un archivo de texto con el comando:

udp-sender -f test.txt > prueba.txt

De esta forma el archivo queda vacío, busque sobre esto y usándolo de esta manera si que lo guarda:

udp-sender -f test.txt 2> prueba.txt

Al parecer la salida es diferente a la del resto de comandos y hay que usar el modificador "2>", pero a la hora de ponerlo en Gambas:

Shell ["udp-sender", "-f", "test.txt", "2>", "prueba.txt"]

la consola de gambas me dice que "se ha ignorado el argumento extra "2>"" y se salta el paso de guardarlo en el archivo.

Como información extra decir que en versiones anteriores de gambas el método "Process_Read()" si que funcionaba con la salida del comando "udp-sender".


Gracias de antemano por su tiempo. Saludos!
 



 
última edición por gambas yacker el Jueves, 18 Abril 2013, 22:31; editado 3 veces 
gambas yacker - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Capturar Salida Comando "udp-sender" Gambas 3 
 
Hola y bienvenido

Si dices que en consola con el modificador 2> sí que guarda contenido en el fichero de texto, eso es porque ese comando parece dar salida por la consola de error, es decir el "stderr". No conozco lo suficiente el comando ni sé cuál debe ser su comportamiento correcto, pero eso no significa que los métodos de lectura/escritura de procesos no funcionen en gambas. Un detalle importante es la sintaxis de Shell y Exec. A Shell le puedes pasar un string con el comando completo entrecomillado, pero Exec sólo admite un array de strings con cada uno de los comandos y modificadores por separado.

Prueba lo siguiente, ya que lo que buscamos es la salida de errores:

Public Sub Button1_Click()

    Dim Proceso as Process
    ' Sintaxis con Exec:
    Proceso = Exec["udp-sender","-f","test.txt"] For Read Write As "Lectura"
    ' Sintaxis con Shell:
    ' Proceso = Shell "udp-sender  -f test.txt"  For Read Write As "Lectura"

End

PUBLIC SUB Lectura_Error()
' Definimos aquí el manejador de eventos de errores

    DIM sLine AS String
    LINE INPUT #LAST, sLine
    TextArea1.Text = sLine

END


Lo normal es implementar los dos métodos, Read y Error.  Prueba y nos cuentas los resultados.

Por cierto, para que el código salga coloreado en el foro, tienes que usar las etiquetas bbcode que genera el segundo botón por la izquierda "C#" code

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Capturar Salida Comando "udp-sender" Gambas 3 
 
El comando shell no recibe un Array de strings, eso es EXEC. Shell recibe una cadena. Tal vez eso sea motivo para el error....

Por otra parte, una posible solución (tampoco conozco ese comando) es:

Public Sub Button1_Click()

Dim salida As String

inc Application.Busy
Shell "udp-sender -f test.txt >salida.txt 2>salidaerr.txt" WAIT
dec Application.Busy
TextArea1.Text = file.load(salida.txt)
TextArea2.Text=file.load(salidaerr.txt)

End


No es lo más ortodoxo, pero en muchos comandos funciona y va genial. Depende del tiempo que tarde la Shell en soltar el proceso y si quieres ir informando paso a paso al usuario o no...

Ya nos cuentas.

Saludos
 



 
última edición por shordi el Viernes, 19 Abril 2013, 09:59; editado 3 veces 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Capturar Salida Comando "udp-sender" Gambas 3 
 
Hola shordi, es cierto lo que dices de la sintaxis pero tengo una explicación y es que ayer se me fue la cabeza y cambie el Shell por el Exec, pero tranquilo en la aplicación estaba bien, el problema es que luego no me dejó editarlo.
He probado tu código y me creó ambos archivos, el "salida.txt" lo crea vacío y el "salidaerr.txt" me lo rellena con la salida de consola, pero el problema es que la aplicación se queda colgada y no llega a realizar el comando. He probado cambiando algunas cosillas y me da errores como el de esta línea:

TextArea1.Text = file.load(salida.txt)


Me dice que "No es un objeto", no especifica el que. Muchas gracias por la respuesta igualmente.

Gracias por la bienvenida jguardon, también he probado tu código y me daba otro error en esta línea:

Proceso = Exec ["udp-sender", "-f", "test.txt"] For Read Write As "Lectura"


El error es: "Manejador de eventos en FMain.Lectura_Error(): No hay suficientes argumentos incorrecto", pero modificando algunas cosillas al final he dado con la solución, os dejo como ha quedado:

Public Sub Button1_Click()

    Dim Proceso As Process
    Proceso = Exec ["udp-sender", "-f", "test.txt"] For Read Write As "Lectura"

End

Public Sub Lectura_Error(Err As String)

    TextArea1.Insert(Err)

End
 


Parece que era bastante sencillo. Muchas gracias a los dos por las respuestas!!
 



 
última edición por gambas yacker el Viernes, 19 Abril 2013, 10:29; editado 1 vez 
gambas yacker - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Capturar Salida Comando "udp-sender" Gambas 3 
 
El error de que no es un objeto solo puede referirse a que Textarea1 no existe o a que "salida.txt", a secas, tampoco existe. Prueba a ponerle el path absoluto del fichero... o déjalo. Si la solción de Jesús te funciona, es la correcta y ortodoxa.

Saludos
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Un Detalle Con El Insert Into Gambas Value... jousseph Bases de Datos 5 Domingo, 04 Noviembre 2012, 20:58 Ver último mensaje
Shell
No hay nuevos mensajes Al Ejecutar Shell ("sudo Date -s '&qu... Oscar Peralta Controles/Librerías/Componentes 2 Viernes, 05 Enero 2018, 19:14 Ver último mensaje
tercoIDE
No hay nuevos mensajes Capturar Salida De Error (Stderr) De Un Co... TuXFamily General 6 Jueves, 13 Septiembre 2012, 03:20 Ver último mensaje
razaAztk
No hay nuevos mensajes Comando "SHELL" No Produce Ningu... PabloGener General 11 Lunes, 15 Junio 2015, 11:32 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario