En aquest tema, aprendrem com REXX pot interactuar amb altres programes externs. Aquesta capacitat és crucial per a la integració de REXX en entorns de treball més amplis, on pot ser necessari comunicar-se amb altres aplicacions o serveis.

Objectius del Tema

  • Entendre com executar programes externs des de REXX.
  • Aprendre a capturar la sortida de programes externs.
  • Gestionar errors en la interfície amb programes externs.

Executar Programes Externs

Utilitzant la Comanda ADDRESS

REXX permet executar comandes del sistema operatiu o altres programes externs utilitzant la comanda ADDRESS. Aquesta comanda redirigeix les instruccions a un entorn específic, com el sistema operatiu.

Exemple Bàsic

/* Executar una comanda del sistema operatiu */
address SYSTEM "dir"

En aquest exemple, la comanda dir (en un sistema Windows) llista els fitxers i directoris del directori actual.

Capturar la Sortida de Programes Externs

Per capturar la sortida d'un programa extern, podem utilitzar la funció LINEIN per llegir la sortida línia per línia.

Exemple

/* Executar una comanda i capturar la seva sortida */
address SYSTEM "dir > output.txt"
output = ""
do while lines("output.txt") > 0
    output = output || linein("output.txt") || " "
end
call lineout "output.txt", ""
say output

En aquest exemple, la sortida de la comanda dir es redirigeix a un fitxer output.txt, que després es llegeix línia per línia i es concatena en una variable output.

Gestionar Errors

Quan es treballa amb programes externs, és important gestionar els errors que poden sorgir durant l'execució. REXX proporciona mecanismes per capturar i gestionar aquests errors.

Utilitzant SIGNAL ON ERROR

Podem utilitzar la instrucció SIGNAL ON ERROR per capturar errors i prendre accions correctives.

Exemple

/* Capturar errors durant l'execució d'una comanda externa */
signal on error
address SYSTEM "nonexistent_command"
say "Aquesta línia no s'executarà si hi ha un error"
exit

error:
say "S'ha produït un error durant l'execució de la comanda externa"
exit

En aquest exemple, si la comanda nonexistent_command falla, el control es transfereix a l'etiqueta error, on es pot gestionar l'error adequadament.

Exercicis Pràctics

Exercici 1: Executar i Capturar Sortida

  1. Escriu un programa REXX que executi la comanda ping a una adreça IP (per exemple, 8.8.8.8) i capturi la sortida.
  2. Mostra la sortida capturada a la pantalla.

Solució

/* Executar la comanda ping i capturar la sortida */
address SYSTEM "ping 8.8.8.8 > ping_output.txt"
output = ""
do while lines("ping_output.txt") > 0
    output = output || linein("ping_output.txt") || " "
end
call lineout "ping_output.txt", ""
say output

Exercici 2: Gestió d'Errors

  1. Escriu un programa REXX que intenti executar una comanda que no existeix i gestioni l'error mostrant un missatge adequat.

Solució

/* Capturar errors durant l'execució d'una comanda externa */
signal on error
address SYSTEM "nonexistent_command"
say "Aquesta línia no s'executarà si hi ha un error"
exit

error:
say "S'ha produït un error durant l'execució de la comanda externa"
exit

Resum

En aquesta secció, hem après com REXX pot interactuar amb programes externs utilitzant la comanda ADDRESS. Hem vist com executar comandes del sistema operatiu, capturar la seva sortida i gestionar errors que poden sorgir durant l'execució. Aquestes habilitats són essencials per integrar REXX en entorns de treball més amplis i automatitzar tasques que requereixen la col·laboració amb altres aplicacions.

En el següent tema, explorarem les macros REXX, que ens permetran crear seqüències de comandes reutilitzables per simplificar i optimitzar el nostre codi.

© Copyright 2024. Tots els drets reservats