Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

tuscript:loesungen:externe_programme_aufrufen

Zurück zum Inhaltsverzeichnis - Lösungen und Tipps


Externe Programme aufrufen

- ms.tru ms.tru

Für verschiedene Aufgaben ist es notwendig oder sinnvoll, externe Werkzeuge von TUSTEP (hier TUSCRIPT) aus aufrufen zu können. Mit der parametrisierbaren Makroanweisung EXECUTE ist dies möglich.
Anhand einer beispielhaften Aufgabe, der Berechnung des dekadischen Logarithmus, wird die Verwendung vorgestellt.
Die hier gezeigten Beispiele wurden nur unter Windows mit installiertem Python-Interpreter getestet. Zur Ausführung müssen die korrespondierenden TUSCRIPT- und Python-Skripte im selben TUSTEP-Projektverzeichnis abgelegt werden.

Bsp.: Berechnung des dekadischen Logarithmus


Für die Berechnung des Logarithmus zur Basis 10 (=dekadischer Logarithmus) existiert in TUSCRIPT keine eigene Funktion. In anderen Programmiersprachen wie Python oder C++ ist eine solche Funktion implementiert. Im Folgenden sollen zwei unterschiedliche Verfahren gezeigt werden, um aus TUSCRIPT heraus, eine parametrisierte Berechnung anzustoßen und die extern errechneten Ergebnisse mit TUSCRIPT weiterzuverarbeiten.

Berechnung und Ausgabe des Ergebnisses in eine Datei


log10_fi.py [1 KB]

#!/usr/local/bin/python
# coding: latin-1
#python3.3

import math
#Konsoleneingabe einlesen (Argument enthält Zahl, für die der Log
#berechnet werden soll)
import sys
y, b = sys.argv

#Kontrollausgabe der Kommandozeileneingabe
#print (sys.argv)

#wenn LOG10(Bruch) berechnen, dann Bruch aufteilen und berechnen,
#sonst String-Zahl in Float konvertieren
if "/" in b:
    b1, b2 = b.split("/")

    b=float(b1)/float(b2)
else:
    b = float(b)

x = math.log10(b)
#print ('Log10(', b ,') = ',x)

#Ausgabe des Ergebnisses in eine Protokolldatei zur Weiterverarbeitung in TUSTEP
f_out = open("log10outxy.txt", "w")
x = str(x)
f_out.write(x)
f_out.close()


Dieses Python-Skript kann von TUSCRIPT aus mittels EXECUTE aufgerufen werden:

pythex_fi.m [8 KB]

$$ MODE TUSCRIPT, {}

- ### Vorverarbeitung ###

- ================================
- Python-Skript zur Berechnung des dekadischen Logarithmus
- ausführen. Als Argument wird exemplarisch
- der zu berechnende Bruch "10/3" übergeben.
- ================================

python = "log10_fi.py"
ERROR/STOP OPEN (python, READ, -STD-)
pfad = FULL_NAME (TUSTEP, "log10_fi.py")
EXECUTE "{pfad} 10/3"

- ================================
- nach Ausführung des Skriptes wird das Ergebnis aus
- der Ergebnisdatei eingelesen
- ================================

- Ergebnis aus Datei einlesen
ERROR/STOP OPEN ("log10out.txt", READ, -STD-)
log_erg = FILE ("log10out.txt")
log_erg = JOIN (log_erg)
PRINT "Das Ergebnis (aus Datei) lautet: ", log_erg


Ausführung:

#MA,pythex_fi.m



Berechnung und Ausgabe des Ergebnisses in die Zwischenablage


log10_cb.py [1 KB]

#!/usr/local/bin/python
#coding: latin-1
#python3.3

import math

#Konsoleneingabe einlesen (Argument enthält Zahl, für die der Log
#berechnet werden soll)
import sys
y, b = sys.argv

#Kontrollausgabe der Kommandozeileneingabe
#print (sys.argv)

#wenn LOG10(Bruch) berechnen, dann Bruch aufteilen und berechnen,
# sonst String-Zahl in Float konvertieren
if "/" in b:
    b1, b2 = b.split("/")

    b=float(b1)/float(b2)
else:
    b = float(b)

x = math.log10(b)
print ('Log10(', b, ') = ',x)

#Ausgabe des Ergebnisses in die Zwischenablage.
#pyperclip muss aus dem Python Package Index
#installiert werden; z.B. mithilfe von pip
import pyperclip

string = str(x)
pyperclip.copy(string)


Aufruf via TUSCRIPT und Einlesen des Ergebnisses:

pythex_cb.m 8 KB]

$$ MODE TUSCRIPT, {}

- ### Vorverarbeitung ###

- ================================
- Python-Skript zur Berechnung des dekadischen Logarithmus
- ausführen. Als Argument wird exemplarisch
- der zu berechnende Bruch "10/3" übergeben.
- ================================

python = "log10_cb.py"
ERROR/STOP OPEN (python, READ, -STD-)
pfad = FULL_NAME (TUSTEP, "log10_cb.py")
EXECUTE "{pfad} 10/3"

- ================================
- nach Ausführung des Skriptes wird das Ergebnis aus
- der Zwischenablage eingelesen
- ================================

- Ergebnis aus der Zwischenablage einlesen
FETCH/CLIPBOARD log_ergcb

- ggf. Daten in einen Datensatz zusammenfügen
log_ergcb = JOIN (log_ergcb)

- Kontrollausgabe ins Ablaufprotokoll
PRINT "Das Ergebnis (aus der Zwischenablage) lautet: ", log_ergcb



Ausführung:

#MA,pythex_cb.m




Kommando mit Windows Powershell ausführen

- ms.tru ms.tru

Anwendungsfall: In einem TUSCRIPT sollen Dateien (im Bsp. ausschließlich die in einem bestimmten Ordner liegenden XML-Dateien) mithilfe der Windows Powershell in ein anderes Verzeichnis kopiert werden:

$$ MODE TUSCRIPT, {}
EXECUTE "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe" "get-childitem -path 'D:\Users\....\' -filter *.xml | copy-item -destination 'D:\Users\....\'"

Zurück zum Inhaltsverzeichnis - Lösungen und Tipps

tuscript/loesungen/externe_programme_aufrufen.txt · Zuletzt geändert: 2021/03/16 05:34 (Externe Bearbeitung)