[Tustep-Liste] Batch-Modus
Giorgio Giacomazzi
giorgio at giacomazzi.de
Di Dez 7 13:43:32 CET 2004
Liebe TUSTEP-Nutzer,
im Anschluß an die ITUG-Tagung vor einem Monat hat sich ein fruchtbarer
Dialog zum "Batch-Modus" von TUSTEP ergeben. Herr Schälkle stellte mir
ein Beispiel zur Verfügung, das die Minimalforderung eines
NUMMERIERE-Aufrufs von der Kommandozeile realisiert, wobei Quell-,
Ziel-, Parameterdatei und auch das Ablaufprotokoll als reine Textdateien
vorliegen bzw. resultieren. Alle Dateien können so mit einem Editor der
Wahl bearbeitet werden. Eine Ausnahme ist (war) die Datei TUSTEP.INI.
Im Einverständnis mit Herrn Schälkle möchte ich das Beispiel hier
dokumentieren, zumal die Technik wenig bekannt ist und weil das Beispiel
einen wichtigen Beitrag zur Schnittstellendiskussion darstellt. Mein
aktuelles Ziel ist auszuloten, wie weit man sinnvollerweise mit dem
Batch-Modus in TUSTEP gehen kann. Erfahrungswerte und
Optimierungsvorschläge anderer Nutzer würden zur Klärung beitragen.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Was ist der "Batch-Modus"?
==========================
Der Batch-Modus meint die Ausführung von TUSTEP ohne
TUSTEP-Bildschirm/-Fenster. Er ist gegenüber dem zumeist verwendeten
Dialog-Modus dort von Vorteil, wo es nur auf die Programmausführung
ankommt, der TUSTEP-Bildschirm gleichsam "stört". Die Abschaltung der
Bildschirmaktualisierung hat generell auch Geschwindigkeitsvorteile. In
der Praxis scheint der Batch-Modus aber nur bei CGI-Makros zum Einsatz
zu kommen, vielleicht auch unbemerkt dank automatischer Einrichtung.
Uns interessiert hier die durch den Batch-Modus prinzipiell ermöglichte
Eingliederung bestimmter TUSTEP-Funktionen in externe workflows.
Darüberhinaus könnte der Batch-Modus vielleicht auch dazu dienen, die
Kernfunktionalität von TUSTEP mit einer neuen Benutzeroberfläche zu
versehen. Diese Möglichkeiten sind aber nicht bzw. nicht ausreichend
dokumentiert.
Aufruf eines TUSTEP-Programms im Batch-Modus
============================================
Das Prinzip für den Aufruf von TUSTEP-Programmen außerhalb von TUSTEP ist:
1. Definieren von Umgebungsvariablen.
2. Vorbereiten einer TUSTEP.INI, die diese Umgebungsvariablen versteht.
3. Aufrufen von TUSTEP mit dieser TUSTEP.INI.
1. Definieren von Umgebungsvariablen
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Das Definieren von Umgebungsvariablen kann auf vielerlei Art und Weise
geschehen: auf der Kommandozeile des Betriebssystems, mittels einer
BAT-Datei, eines Shell-Skriptes, usw.. Der allgemeinen Verfügbarkeit
halber wird hier eine unter Windows einsetzbare Batch-Datei verwendet:
------------------------------------------------
@ECHO OFF
REM Datei NUMMERIERE.BAT
REM Aufruf: NUMMERIERE quelle ziel parameter
REM Dateinamen im Aufruf mit kompletter Pfadangabe
REM Pfade zu TUSTEP-Directory (LIB), zu TUSTEP.INI (DSK), Scratch-Dateien
SET TUSTEP_LIB=C:/PROGRAMME
SET TUSTEP_DSK=C:
SET TUSTEP_SCR=C:/TMP
SET TUSTEP_PRJ=-
REM TUSTEP im Batch-Modus starten
SET TUSTEP_MDS=BATCH
REM Spezifische Parameter
SET PROGRAMM=NUMMERIERE
SET QUELLE=%1
SET ZIEL=%2
SET PARAMETER=%3
REM Starten von TUSTEP; Protokoll wird in Datei umgeleitet
%TUSTEP_LIB%/TUSTEP/O > nummeriere.log
------------------------------------------------
Die Umgebungsvariable PROGRAMM und ihre mögliche Werte müssen der
TUSTEP.INI im Voraus bekannt sein. Dem Wert der Variable PROGRAMM muß
ein gleichnamiges Segment in der TUSTEP.INI entsprechen. TUSTEP_PRJ kann
nach meiner Erfahrung dagegen entfallen.
2. TUSTEP.INI
~~~~~~~~~~~~~
Folgende TUSTEP.INI enthält im Wesentlichen ein Segment für den Aufruf
des TUSTEP-Programms NUMMERIERE.
------------------------------------------------
#= INIT
#= CONT
#= NUMMERIERE
#= VERGLEICHE
#=: INIT
#definiere,code=iso
$$ FETCH programm = programm
$$ INCLUDE <programm>
#=: CONT
#normiere
#=: NUMMERIERE
$$ FETCH quelle = quelle
$$ FETCH ziel = ziel
$$ FETCH parameter = parameter
#fehlerhalt,loesche
#de, dateinamen = *
quelle = <quelle>
ziel = <ziel>
parameter = <parameter>
*eof
#an, quelle'parameter, tr=-
#da, ziel, sdf-ap, tr=-
#da, scr*quelle'scr*ziel'scr*parameter
#um, quelle, scr*quelle, 0, +, code=iso
#um, parameter, scr*parameter, 0, +, code=iso
#nummeriere, scr*quelle, scr*ziel, -std-, +, scr*parameter
#um, scr*ziel, ziel, , +, cod=iso
#=: VERGLEICHE
Hier könnten entsprechende Anweisungen
und Kommandos für VERGLEICHE stehen
------------------------------------------------
Bekanntlich führt TUSTEP ein Segment INIT in der Datei TUSTEP.INI beim
Start automatisch aus. Nach Auswertung der Umgebungsvariable PROGRAMM
wird via INCLUDE ein entsprechendes Segment ausgeführt. Dieses Segment
wertet zuerst spezifische Umgebunsvariablen (Dateipfade), wandelt die
Quell- und Parameterdatei vom Text- ins TUSTEP-Format um, etc. Die
Hauptsache ist aber der generische Aufruf des Programms, hier
NUMMERIERE, welcher mit den konkreten Werten aus den Umgebungsvariablen
konkretisiert wird. Die Zieldatei wird zum Schluß als Textdatei exportiert.
3. Aufruf von TUSTEP im Batch-Modus
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Auf der Grundlage der obigen BAT-Datei und TUSTEP.INI könnte ein
NUMMERIERE-Aufruf im Batch-Modus, das aus einer QUELLE.TXT eine ZIEL.TXT
gemäß PARAMETER.TXT liefert, wie folgt aussehen:
------------------------------------------------
C:\> NUMMERIERE.BAT C:\QUELLE.TXT C:\ZIEL.TXT C:\PARAMETER.TEXT
------------------------------------------------
Leider verlangt TUSTEP komplette Pfadangaben, auch wenn die Dateien sich
im aktuellen Verzeichnis befinden, weshalb hier das untypsiche
Wurzelverzeichnis gewählt wurde.
Die zufälligen Beispieldaten lehnen sich an das NUMMERIERE-Beispiel im
Handbuch an:
QUELLE.TXT
------------------------------------------------
... @i *4 ...
... @i #2 ...
... @i #4 ...
... @i *2 ...
------------------------------------------------
ZIEL.TXT
------------------------------------------------
... @i *2 ...
... @i #1 ...
... @i #2 ...
... @i *1 ...
------------------------------------------------
PARAMETER.TXT
------------------------------------------------
LNR /@i #/
VNR /@i */
------------------------------------------------
Bemerkungen, Erweiterungen, Wünsche
===================================
- Der Aufruf ist generisch: Er kann auf beliebige Quell- und
Parameterdateien angewendet werden.
- Durch die Umleitung der Standardausgabe in eine Datei (s. am Schluß
der BAT-Datei) bleibt das Ablaufprotokoll von TUSTEP in voller Länge
erhalten. Dies lernt man während der Testphase sehr schätzen, fast lieben.
- Da TUSTEP nur Dateien im eigenen Format direkt verarbeitet, müssen
Quell-, Ziel-, und Parameterdateien in jedem Programm-Segment
NUMMERIERE, VERGLEICHE, usw. neu importiert und exportiert werden. Dies
ermöglicht aber die Kombinationen von Kommandos zu einer Kommandofolge.
- Werden Umgebungsvariablen falsch gesetzt, könne die Folgen auch
unangenehme sein: TUSTEP versucht wiederholt im Dialog-Modus zu starten;
die Protokolldatei wächst ständig weiter; zurückgebliebene
Scratch-Dateien verhindern einen korrekten Neustart trotz korrekter
Variablen.
- Besonders fehlerträchtig sind die unter DOS/Windows noch üblichen
BAT-Dateien. Um Fehlern vorzubeugen, würde ich gerade bei BAT-Dateien
mehrere Sicherheitsmaßen empfehlen:
1. Umgebungsvariablen zuerst annullieren, z.B. "SET TUSTEP_LIB="
2. Prüfen, daß Umgebungsvariablen erfolgreich definiert wurden:
if (%TUSTEP_LIB%) == () goto EXIT_ERROR
if not exist %TUSTEP_LIB% goto EXIT_ERROR
3. Wert der Variablen zur Kontrolle ausgeben,
generell oder nur im ERROR-Block:
echo TUSTEP_PRJ = [%TUSTEP_PRJ%]
4. Zurückgebliebene Scratch-Dateien vor dem Aufruf
"%TUSTEP_LIB%/TUSTEP/O" löschen (radikal, aber effizient):
del /q %TUSTEP_SCR%\*.TSF
- TUSTEP verlangt auf der Systemebene absolute Pfadangaben. Das ist
lästig und fehlerträchtig, wenn eingegeben werden muß:
NUMMERIERE.BAT "C:\Dokumente\username\batchtest\QUELLE.TXT"
"C:\Dokumente\username\batchtest\ZIEL.TXT"
"C:\Dokumente\username\batchtest\PARAMETER.TEXT"
Es wäre schön, wenn TUSTEP mit relativen Pfadangaben umgehen könnte,
sodaß folgende Eingabe genügt, wenn die Dateien im Pfad liegen:
NUMMERIERE.BAT QUELLE.TXT ZIEL.TXT PARAMETER.TEXT
Wenn ich richtig verstanden habe, soll aber die Makrosprache bald
relative Pfadangaben unterstützen.
- Für eine Nutzung des Batch-Modus von TUSTEP im grösseren Stil sind
BAT-Dateien m.E. nicht empfehlenswert, eher Shell-Skripts oder eine
ordentliche Skriptsprache. Folgendes Python-Beispiel zeigt nicht bloß
den Aufruf eines einzigen NUMMERIERE, sondern den Aufruf mehrerer
TUSTEP-Programme hintereinader, wobei bekannte Fehler automatisch
abgefangen werden:
from tustep import *
t = TustepBatch()
t.setPathToTustepDir("C:/Programme")
t.setPathToTustepIni("C:/test")
t.setPathToTustepScr("C:/test/tmp")
t.nummeriere("quelle.txt", "ziel.txt", "param.txt" )
t.setEnvironmentVar("MODUS", "WORT")
t.vergleiche("quelle.txt", "ziel.txt", "ve_prot.txt")
...
Da die TUSTEP-Pfade i.d.R. aber gleich bleiben, können die drei Zeilen
setPathToTustepXXX() nach erstmaliger Definition entfallen, die
Definition übernommen werden. Dann genügt im Prinzip:
from tustep import *
t = TustepBatch()
t.nummeriere("quelle.txt", "ziel.txt", "param.txt" )
t.vergleiche("quelle.txt", "ziel.txt", "ve_prot.txt")
Im Hintergrund passiert einiges:
- zurückgebliebene Scratch-Dateien werden gelöscht (bei "t =
TustepBatch()");
- relative Dateipfade, z.B. "quelle.txt", werden automatisch in absolute
Pfade umgewandelt und als solche an TUSTEP übergeben;
- der TUSTEP-Start wird unterbunden, wenn die Pfade nicht zutreffen oder
wenn Umgebungsvariablen nicht definiert wurden.
Zur Anpassung des Grundsystems können zusätzliche Umgebungsvariablen
zugewiesen werden, soweit sie auch der TUSTEP.INI bekannt sind.
Beispielsweise wird oben vor dem Aufruf von VERGLEICHE noch eine
Umgebungsvariable MODUS mit als "WORT" definiert.
- Zur Optimierung umfangreicher, komplexer Prozeduren würde ich mir
wünschen, daß im Ablaufprotokoll beim Ende eines Einzelprogramms, z.B. bei
"Ende UMWANDLE auf: GIORGIO am: 07.11.04 um: 12:37:02"
auch die Programmdauer in Sekundenbruchteilen erscheint.
- Die Datei TUSTEP.INI ist die einzige der beteiligten Dateien, die mit
TUSTEP erstellt werden muß. Dies ist nicht nur ein Konzeptbruch, sondern
in der Testphase ziemlich unhandlich. Nun ist es mir gelungen, eine
korrekte TUSTEP.INI zu generieren (ohne TUSTEP). Damit entfällt auch der
lästige Wechsel zwischen dem TUSTEP- und dem Texteditor. TUSTEP wird
mehr und mehr zu einem "Dienst".
...
+++++++++++++++++++++++++++++++++++++++++++++++++++
Damit ein anderes Thema der ITUG-Tagung, die Veröffentlichung des
Handbuchs im Internet, vielleicht auch ein TUSTEP-Wiki, nicht in
Vergessenheit gerät, überlege ich die Dokumentation zum Batch-Modus auch
als wiki-Seite zur Verfügung zu stellen. Benachrichtigung folgt.
Nun möchte ich aber Herrn Schälkle für den wertvollen Beitrag zu einer
zentralen Quo vadis-Frage danken. Ich hoffe auf eine Fortsetzung.
Mit besten Grüßen,
Giorgio Giacomazzi
Strelitzstr. 18
D-12105 Berlin
Tel.: 030-70176848
Mehr Informationen über die Mailingliste Tustep-Liste