Übergabe von Variablen von Skript zu Skript

Plattformunabhängige GUIs mit wxWidgets.
Antworten
cle1986
User
Beiträge: 18
Registriert: Donnerstag 7. September 2006, 12:44

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?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
cle1986
User
Beiträge: 18
Registriert: Donnerstag 7. September 2006, 12:44

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?
Antworten