- Vytvoril/a D2000 Dev Team, naposledy zmenené apr 14, 2022
Akcia RUN
RUN "meno programu" [HIDE] SYNC/ASYNC [paramExpr_Str] [TIMEOUT timeOutExprStr_Int]
intIdent_Int := RUN "meno programu" [HIDE] SYNC [paramExpr_Str] [TIMEOUT timeOutExpr_Int]
RUNEX _toExec [HIDE] SYNC/ASYNC [paramExpr_Str] [TIMEOUT timeOutExprStr_Int]
intIdent_Int := RUNEX _toExec [HIDE] SYNC [paramExpr_Str] [TIMEOUT timeOutExpr_Int]
Parametre
"meno programu" | in | Meno spustiteľného programu (voliteľne v úvodzovkách). |
intIdent_Int | out | Identifikátor typu Int - návratový kód programu. |
HIDE | in | Nepovinné kľúčové slovo - nezobrazenie (skrytie) okna štartovaného programu. |
SYNC | in | Synchrónne spustenie programu (čakanie na ukončenie). |
ASYNC | in | Asynchrónne spustenie programu. |
paramExpr_Str | in | Výraz typu Text - parametre spusteného programu. |
TIMEOUT timeoutExpr_Int | in | Výraz typu Int - maximálny čas behu programu v sekundách. |
_toExec | in | Identifikátor typu text. |
Pri prvom variante je možné špecifikovať, či bude program spustený synchrónne (SYNC) alebo asynchrónne (ASYNC). Druhý variant je vždy synchrónny. Po skončení programu je jeho návratový kód priradený do identifikátora intIdent_Int.
Ak je maximálny čas behu programu ohraničený kľúčovým slovom TIMEOUT a program neskončí v časovom limite, bude násilne ukončený a návratová hodnota (v prvom prípade) nadobudne hodnotu _ERR_TIME_OUT.
V niektorých prípadoch je potrebné, aby meno programu vzniklo na základe textových operácií. Tu je vhodné použiť akciu RUNEX, ktorá štartuje program daný hodnotou textového identifikátora _toExec.
Rovnaký efekt dosiahneme akciou RUN, ak ako meno programu bude prázdny textový reťazec a celý príkaz sa uvedie ako parameter pomocou výrazu paramExpr_Str (viď. príklad).
Pre Linux/Raspberry PI je nutné zadávať oddelene "meno programu" a parametre, napr.
RUN "/usr/bin/ncftpget" SYNC _paramStr
Pokiaľ bude "meno programu" prázdne alebo bude obsahovať aj parametre, program sa nespustí.
Ak je akcia použitá vo variante s návratovým kódom a nepodarilo sa spustiť program, návratový kód (intIdent_Int) bude nastavený na neplatnú hodnotu.
Poznámka k "wildcard" parametrom pre Linux/Raspberry PI
Treba si uvedomiť, že expanziu hviezdičiek a podobných špeciálnych znakov vykonáva shell (napr. bash). Preto nasledovný príkaz nebude fungovať:
RUNEX "/usr/bin/rm" SYNC "/tmp/*.txt"
Je nutné vytvoriť pomocný shell skript (napr. /opt/d2000/bin/mydel.sh), ktorý obsahuje volaný príkaz a parameter $* (v syntaxi bash reprezentuje všetky parametre, s ktorými je skript volaný), tj. skript bude obsahovať dva riadky:
#!/usr/bin/env bash
/usr/bin/rm $@
Nezabudnite nastaviť práva skriptu, aby ho užívateľ, pod ktorým je spustený D2000 (štandardne d2000), mohol tento skript spúšťať, tj.
chmod 755 /opt/d2000/bin/mydel.sh
Takýto skript je možné volať a pri volaní shell vykoná expanziu parametrov:
RUNEX "/opt/d2000/bin/mydel.sh" SYNC "/tmp/*.txt"
Iný príklad pre kopírovanie súborov na vzdialený server pomocou ncftpput. Skript /opt/d2000/bin/ncftpput.sh bude obsahovať riadky:
#!/usr/bin/env bash
/usr/bin/ncftpput $@
Volanie zo skriptu:
_parameter := "-F -u myuser -p mypassword ftpserver /some/server/path /some/local/path/*.zip"
_retCode := RUN "/opt/d2000/bin/ncftpput.sh" HIDE SYNC _parameter TIMEOUT 60
; Kopírovanie súboru ; Zdrojový súbor TEXT _copySrc := "d:\d2000.v70\prefix\sqlback\syscfg.db" ; Cieľový adresár TEXT _copyDst := " c:\archiv" ; Parametre pre príkaz copy TEXT _switch := "/Y " ; Návratový kód INT _ret _ret := RUN "cmd /C copy" SYNC _switch + _copySrc + _copyDst ; alebo celý príkaz zadaný ako výraz ; _ret := RUN "" SYNC "cmd /C copy " + _switch + _copySrc + _copyDst IF _ret # _ERR_NO_ERROR THEN ; chyba ENDIF END
Súvisiace stránky:
0 komentárov