Comunidad Gambas-es
Administración de errores. Procesos - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Administración de errores. Procesos (/thread-1806.html)



Administración de errores. Procesos - Shell - 05-10-2024

Buenas!.

Usando un comando externo a Gambas. Intente usar Try, Catch, Error para comprobar si el proceso
me detectaba error, pero no lo he logrado de esa manera.

Si lo he logrado mediante la gestión del proceso.

Ejemplo uno. No me funciona.

Código:
Public Sub Button1_Click()

  'Es solo un ejemplo, el comando podía haber sido otro

  Shell "ls -l /home/pepe/"

  If Error Then
    Print "El directorio no existe"
  Else
    Print "Fin"
  Endif

End

Como es normal no he usado Try, que esto hace que se ejecute la instrucción si o si, de error o no lo de.

Ahora usando Procesos, el que me ha funcionado.
Ejemplo dos.

Código:
Private textoError As String

Public Sub Form_Open()

End

Public Sub Button1_Click()

  'Limpiamos siempre el contenido de la variable
  textoError = ""

  'Es solo un ejemplo, el comando podía haber sido otro

  Shell "ls -l /home/pepe/" For Read Write As "Proceso"

End

Public Sub Proceso_Error(sError As String)

  textoError &= sError

End

Public Sub Proceso_Read()

  Dim sLinea As String

  sLinea = Read #Last, Lof(Last)

  Print sLinea;

End

Public Sub Proceso_Kill()

  If textoError Then Message.Error(textoError)
  Print "Proceso Finalizado"

End

Saludos


RE: Administración de errores. Procesos - Shell - 05-10-2024

Una solución posible es redirigir la salida de errores a la salida estándar.
Creo que con Exec se puede usar "WITH ERROR"

Como veis no he necesitado usar sentencias para depuración de errores tan solo comprobar la variable.

Código:
Public Sub Button1_Click()

  Dim sError As String

  'Es solo un ejemplo, el comando podía haber sido otro

  Shell "ls -l /home/pepe/ " & "2>&1" To sError

  If Len(sError)
    Print "El directorio no existe"
  Else
    Print "Fin"
  Endif

End

Saludos