Seite 1 von 1

Übergabe von Variablen von Skript zu Skript

Verfasst: Donnerstag 14. September 2006, 11:19
von cle1986
Hallo!

Ich möchte mit einer GUI (wxPython) ein textbasiertes Python File aufrufen.
Bei diesem File sollen allerdings noch Parameter mit übergeben werden.
z.B.: file run

Weiters werden in der GUI Eingaben getätigt und in Variablen gespeichert. Diese Eingaben sollen dann an das textbasierte Python File übergeben werden.
Nun zu meinem Fragen:

1) Welcher Befehl sollte für den Aufruf mit Prametern verwendet werden?
Ich habe momentan os.system, call und execfile getestet. Die GUI soll aber nicht beendet werden.

2) Wie kann ich die Variablen der GUI an das textbasierte Pythonfile übergeben?

3) Wie kann ich die Ausgaben von print und die des textbasierten Pythonfiles in einem Fenster entweder stdout/stderr oder auf der Konsole ausgeben lassen?

Verfasst: Donnerstag 14. September 2006, 12:49
von CM
Hoi,

ad 1) Schau Dir mal subprocess an
ad 2) ebenso
ad 3) Verstehe ich nicht. Wenn Du Dein Programm in der Konsole startest, sollten alle stdouts- und -errs sowieso dorthin zeigen. Ansonsten kannst Du ja alles in einen Puffer lenken und das in einem TextCtrl-Widget ausgeben.

Gruß,
Christian

Verfasst: Donnerstag 14. September 2006, 14:16
von cle1986
Habe im Forum nach Subprocess gesucht und 2 brauchbare Threads gefunden.

Code: Alles auswählen

def start(self,evt):
        print "Checking your inputs of correctness..."
        print "Starting simulation"
        temp = self.filet.GetValue()
        #os.chdir(os.path.dirname(temp))
        proc = subprocess.Popen((sys.executable, temp+" run"),
                                stdin = subprocess.PIPE, 
                                stdout = subprocess.PIPE, 
                                cwd = os.chdir(os.path.dirname(temp)))
        
        proc.stdin.write(str(self.starttime))    
        proc.stdin.write(str(self.endtime))
        proc.stdin.write(str(self.stepmax))
        proc.stdin.write(str(self.stepmin))
        proc.stdin.write(str(self.method))
        proc.stdin.close()
        print "Simulation done"
Hätte mir das so vorgestellt im Hauptprogramm ^

Im aufgerufnen Programm hätte ich es so probiert, aber funktioniert nicht!!!!!

Code: Alles auswählen

self.starttime = sys.stdin.read()
self.endtime = sys.stdin.read()
self.stepmax = sys.stdin.read()
self.stepmin = sys.stdin.read()
self.method = sys.stdin.read()
^Das hätte ich am Beginn des Codes so eingefügt.

Doch leider funktioniert das so nicht.

EDIT:
Das mit den Ausgaben funktioniert auch noch nicht.
Wenn ich die GUI unter Linux auf Shell ausführe, dann werden die print Ausgaben im Fenster stdout/stderr angezeit. Die Ausgabe, die das Programm, welches vorher call()... aufgerufen wird, jedoch gibt alles in der Shell aus.
Mit welchen Befehl kann ich diese Ausgaben auch im Fenster stdout/stderr anzeigen lassen?