Seite 1 von 1

opsi 3.3.1: execPython-Sektion und Parameter

Verfasst: 20 Aug 2009, 17:20
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$

Re: opsi 3.3.1: execPython-Sektion und Parameter

Verfasst: 20 Aug 2009, 20:22
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$)

Re: opsi 3.3.1: execPython-Sektion und Parameter

Verfasst: 21 Aug 2009, 09:40
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.

Re: opsi 3.3.1: execPython-Sektion und Parameter

Verfasst: 21 Aug 2009, 15:51
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