Autor |
Mensaje |
portaro
Ingeniero Programador
Registrado: Abril 2014
Mensajes: 215
Edad: 39 Ubicación: Portugal
|
Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Tengo este codigo hecho pero lo veo no muy bien por si libero el programa y despues alguien no tiene el mismo comando que Shell ejecuta instalado en su sistema ese pc y me gustaria que antes de que ejecute el comando hiciera una comprobación de que el comando existe y en caso de no imprimiera en la textarea la info para hacerlo en Ubuntu, intente hacerlo con IF THEN Endif pero no he sido quien de lograr recoger la salida del comando en términos de dpkg -l o grep con Shell. Ademas supongo que una vez más estaré haciendo todo mal como siempre que soy muy manco en esto.
Tb intente esto →
Y esto otro
Saludos y a ver si me aclarais.
End
|
#1 Jueves, 07 Diciembre 2017, 16:37 |
|
|
portaro
Ingeniero Programador
Registrado: Abril 2014
Mensajes: 215
Edad: 39 Ubicación: Portugal
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Podria funcionar el evento.read evento?
Pues me respondo yo mismo: no, ya que no veo ningún evento read .
última edición por portaro el Jueves, 07 Diciembre 2017, 17:18; editado 1 vez
|
#2 Jueves, 07 Diciembre 2017, 16:59 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Portaro:
¿y si pruebas con el comando which?
Algo asi como...
|
#3 Viernes, 08 Diciembre 2017, 11:00 |
|
|
portaro
Ingeniero Programador
Registrado: Abril 2014
Mensajes: 215
Edad: 39 Ubicación: Portugal
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Entendi el concepto Jsbsan.
Pero tengo una duda en esta linea
El "" sin nada entre las comillas en gambas toma por definicion lo anterior o sea busca la salida de which porque sea ha especificado antes (la ultima vez del codigo ) o es la expresion para retornar algo de un comando externo por definicion en gambas?
Gracias por ayudarme , luego que pueda continuar el programa adaptare tu código. Es fundamental escribir algo para entender algo de el.
|
#4 Sabado, 09 Diciembre 2017, 10:43 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Portaro:
Te explico el codigo y los valores que va tomando la variable string salida cuando se va ejecutando el programa:
1) Dim salida As String
Define que "salida" es una variable tipo cadena "string", y su valor es vacio (osea igual a "")
2) Shell "which " & comando To salida
Lo que se obtenga del comando which, se lo asigna a la variable "salida"
Si no se genera nada, el comando salida, queda vacia ("")
3) If salida = "" Then
Hace una comprobación: Si la variable vacia es igual a vacia ("") entonces hace (3.1)
3.1) Print "El comando no esta instalado en este equipo"
escribe en pantalla "El comando no esta instalado en este equipo")
3.2) Else Print "Conmando esta en...", salida
Sino, escribe en pantalla "comando esta en ..." y el valor de la variable "salida"
Recuerda que:
if (true) then (something 1) else (something 2)
hace la sigue comprobacion "Si verdad Entonces hace algo1 sino hace algo2"
If : used to say that something will happen only in the case that something else happens or is true
|
#5 Sabado, 09 Diciembre 2017, 11:28 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
3) If salida = "" Then
Hace una comprobación: Si la variable vacia es igual a vacia ("") entonces hace (3.1)
Es más elegante y comprensible la forma de negación:
If Not salida Then
salida sólo tiene valor cuando se ha asignado una cadena, de lo contrario equivale a nada.
Del mismo modo, se pueden ahorrar comparaciones y bifurcaciones en los condicionales. Si salida tiene un valor, es que el comando existe y se ejecuta, por lo tanto sólo hace falta una comprobación para indicar que no existe. Yo lo hubiera hecho así:
' gambas class file
Uso de la función:
Ya sé que cuando se usa el código hay que usar la cláusula Else para informar al usuario, pero la función y el código resultante me parece más limpio y conciso
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"
|
#6 Domingo, 10 Diciembre 2017, 18:11 |
|
|
portaro
Ingeniero Programador
Registrado: Abril 2014
Mensajes: 215
Edad: 39 Ubicación: Portugal
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Gracias por las contestaciones me ha quitado unas cuantas dudas lo que me habeis escrito.
Y ya estoy poniendo codigo en el programa .
Necesitaria eso si que alguien me traduzca el como poner el print a textarea porque no termino de entenderlo o no le veo la manera .
La cosa es que en modo terminal me se mover ya bien pero los objectos y clases no domino mucho no se como traducir el print por modo a que textarea haga lo mismo que esta en la simplicidad del print - salida - resultado.
Saludos y mil gracias.
última edición por portaro el Lunes, 18 Diciembre 2017, 16:35; editado 1 vez
|
#7 Lunes, 18 Diciembre 2017, 16:14 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Citar: Necesitaria eso si que alguien me traduzca el como poner el print a textarea porque no termino de entenderlo o no le veo la manera .
No hay que poner el print en ningún sitio. Olvídate del Print.
Para que un textarea muestre un texto sólo tienes que asignar ese valor en la propiedad Text del textArea.
Así:
miTextArea.Text = "Este es el texto que vamos a mostrar"
Por otra parte
El comando Shell envía la salida normal del sistema a una variable con la clausula TO. Así:
deja el resultado del comando ls en la variable misArchivos. Después sólo tienes que pasar el valor al textarea así:
Dim misArchivos as string
Shell "ls " & user.home to misArchivos
miTextArea.Text=misArchivos
wait 0.01 'El wait hace una llamada al bucle de eventos y refresca la pantalla con lo que se muestra el nuevo valor del textArea.
También puedes intentar asignar directamente la salida del Shell a la propiedad text del TextArea. Así:
Shell "ls " & user.home to miTextArea.Text wait 'aquí el wait detiene la ejecución hasta que finalice el comando Shell
Saludos.
=================== No podemos regresar
|
#8 Lunes, 18 Diciembre 2017, 17:54 |
|
|
portaro
Ingeniero Programador
Registrado: Abril 2014
Mensajes: 215
Edad: 39 Ubicación: Portugal
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
Gracias por ayudarme pero como me vuelvo loco con la sintaxis tengo dudas en muchas cosas por ejemplo
Porque se usa eso ? es un lugar temporal para guardar la variable?
Muchas gracias.
|
#9 Martes, 19 Diciembre 2017, 04:33 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Comprobar Existencia De Comando Antes De Ejecutarlo En El Objeto.
portaro:
Citar: Shell "ls " & user.home
Porque se usa eso ? es un lugar temporal para guardar la variable?
No, no es un un lugar temporal para guardar la variable.
Es la ruta del usuario, por ejemplo /home/usuario, /home/portaro, /home/julio, etc..
Es como si escribieras en la consola:
$ls /home/portaro
http://gambaswiki.org/wiki/comp/gb/user/home
Citar: .... to miTextArea.Text
Hay le indicas al comando Shell donde quieres que vaya lo que se obtiene, en este caso, hacia el textArea "miTextAres", y la guardas en la propiedad .text del textArea.
|
#10 Martes, 19 Diciembre 2017, 07:57 |
|
|
|