opsi 3.3.1: execPython-Sektion und Parameter

Antworten
bernhardus
Beiträge: 30
Registriert: 02 Apr 2009, 11:25

opsi 3.3.1: execPython-Sektion und Parameter

Beitrag von bernhardus »

Hallo,

ich experimentiere z. Z. mit der execPython-Sektion.

Ich möchte die Sektion mit Parametern aufrufen, was auch funktioniert.

Mein Problem ist: Wenn ich Skript-Variablen als Parameter angebe, so werden diese als Namen übergeben, nicht jedoch ihr Wert. Übergebe ich dagegen Umgebungsvariablen wie %ScriptPath%, dann wird der Wert an die Sektion übergeben.
Die Art des Aufrufs (direkt oder mittels GetOutStreamFromSection) spielt dabei keine Rolle. Die Skript-Variablen (beide deklariert und definiert) werden schon beim Aufruf als Name übergeben.

Habe ich im Handbuch irgendetwas übersehen?

Beispiel:

Code: Alles auswählen

  ;...
  execPython_PrintParm %ScriptPath% $Parm2$ $Parm3$
  ;...

[execPython_PrintParm]
import sys
print sys.argv[1]
print sys.argv[2]
print sys.argv[2]
liefert im InstLog:

Code: Alles auswählen


Set  PythonResult = GetOutStreamFromSection('ExecPython_PrintParm J:\install\package $Parm2$ $Parm3$')
  
  Execution of ExecPython_PrintParm
    python --version
                ::: Python 2.5.2
    
    c:\tmp\_winst.bat saved back
    python c:\tmp\_winst.bat J:\install\package $Parm2$ $Parm3$
                
                output:
                --------------
                J:\install\package
                $Parm2$
                $Parm3$
Gruß
Bernd
___________
opsi 4.0.0.18
winst 4.10.8.7
Ubuntu 10.04
Benutzeravatar
j.schneider
uib-Team
Beiträge: 2055
Registriert: 29 Mai 2008, 15:14

Re: opsi 3.3.1: execPython-Sektion und Parameter

Beitrag von j.schneider »

bernhardus hat geschrieben:Hallo,

Code: Alles auswählen

Set  PythonResult = GetOutStreamFromSection('ExecPython_PrintParm J:\install\package $Parm2$ $Parm3$')
Da fehlt wahrscheinlich die String-Verknüpfung mit "+"...

Code: Alles auswählen

Set  PythonResult = GetOutStreamFromSection("ExecPython_PrintParm J:\install\package "+$Parm2$+" "+$Parm3$)


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


bernhardus
Beiträge: 30
Registriert: 02 Apr 2009, 11:25

Re: opsi 3.3.1: execPython-Sektion und Parameter

Beitrag von bernhardus »

Ha! Guter Einwand - hätte mir eigentlich selbst auffallen müssen. Kam wohl daher, daß ich zunächst folgendes versucht habe (wie im ersten posting zu sehen):

Code: Alles auswählen

  ;...
  execPython_PrintParm %ScriptPath% $Parm2$ $Parm3$
  ;...
und erst anschließend den im log dargestellten Aufruf:

Code: Alles auswählen

  ;...
  Set PythonResult = GetOutStreamFromSection('ExecPython_PrintParm %ScriptPath% $Parm2$ $Parm3$')
  ;...
Wie auch immer, das Verhalten ist imho zumindest inkonsistent, da
  • auch bei anderen Gelegenheiten winst-Variablen innerhalb von strings durch ihren Inhalt ersetzt werden
  • ein Variablenbezeichner als Parameter übergeben wird und nicht der Wert der Variable
  • Umgebungsvariablen und winst-Variablen unterschiedlich behandelt werden (%ScriptPath% wird im zweiten Aufruf durch seinen Wert ersetzt - im Gegensatz zu $Parm2$)
Die Lösung für mich ist: Ich verwende die Variablen direkt in der Sektion und übergebe sie gar nicht erst als Parameter. Ist mir erst nachträglich im winst-Handbuch aufgefallen, daß das geht.

Danke für die Antwort.
Gruß
Bernd
___________
opsi 4.0.0.18
winst 4.10.8.7
Ubuntu 10.04
Benutzeravatar
j.schneider
uib-Team
Beiträge: 2055
Registriert: 29 Mai 2008, 15:14

Re: opsi 3.3.1: execPython-Sektion und Parameter

Beitrag von j.schneider »

Hallo,

das Verhalten ist immer so:
In einer Aktionen- bzw. Sub-Sektion werden Konstanten "gepatcht" und Variablen müssen verknüpft werden.
In sekundären Sektionen werden Variablen und Konstanten "gepatcht".
Daher kann man Variablen auch folgendermaßen an ein Python-Skript "übergeben".

Code: Alles auswählen

[Aktionen]
DefVar $var1$
Set $var1$ = "xxxxx"
...

[execPython_PrintParm]
var1 = "$var1$"
var2 = "%ScriptPath%"
...
Gruß
Jan Schneider


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


Antworten