Seite 1 von 1

python script in Programm in cmd öffnen

Verfasst: Samstag 27. Mai 2006, 11:43
von Spaten
Hallo erstmal! :D

Ich hab da mal eine Frage...

...wie kann ich in einem (GUI) Python-Script ein anderes (nicht GUI) Python Script ausführen?
Ich habe exec() gefunden, allerdings funktioniert das nur mit GUI - Anwendungen,
da wenn man print benutzt nirgendwo hingeprintet werden kann... :?
ich möchte also erst die Konsole (cmd) öffnen und dann über exec das Programm ausführen.
Wie mache ich das am besten?

Code: Alles auswählen

def onPyw(self, event):
        prog = self.control.GetValue()
        # hier am besten cmd öffnen
        exec(prog)

Verfasst: Samstag 27. Mai 2006, 11:58
von oscar15
man kann am anfang eine while schleife einbaun, die am ende des programmes beendet wird.
Dann kann man per doppelklick auf das Programm, es in cmd öffnen, es dürfen aber keine sonderzeichen/fehler in dem programm vorhanden sein!

Re: python script in Programm in cmd öffnen

Verfasst: Samstag 27. Mai 2006, 12:05
von Python 47
Hallo,
Spaten hat geschrieben: Wie mache ich das am besten?

Code: Alles auswählen

def onPyw(self, event):
        prog = self.control.GetValue()
        # hier am besten cmd öffnen
        exec(prog)
Die cmd Konsole öffnest du so:

Code: Alles auswählen

import os
os.startfile('cmd.exee')
Wenn ich dich richtig verstanden hab willst du ein Programm(nicht GUI) über cmd öffnen. Das machst du so:

Code: Alles auswählen

import os
os.system('cd.. & cd.. & cd.. & cd.. & cd.. & cd Pfad & programm.exe')
Diese Variante ist aber nicht sehr schön. Du kannst auch folgendes machen:

Code: Alles auswählen

import os
os.startfile('Pfad\\programm.exe')
Wenn die exe keine GUI besitzt wird sie dann mit cmd geöffnet.

Gruß Thomas

Verfasst: Samstag 27. Mai 2006, 13:12
von Spaten
oh cool dankeschön ich werd es ausprobieren :D

Verfasst: Samstag 27. Mai 2006, 13:36
von Spaten
Es funktionert mit

Code: Alles auswählen

os.startfile(self.dirname+"\\"+self.filename)
allerdings wird das Fenster nach Ablauf des Programms gleich wieder geschlossen... so kann man ein ergebnis, welches mit print ausgegeben wirde nicht mehr sehen, bzw. eventuelle Fehlermeldungen nicht lesen

ich möchte ja damit eine python-Datei Ausführen, allerdings ohne, dass sich das cmd-Fenster gleich wieder schließt.

Hat da jemand ne idee?

Verfasst: Samstag 27. Mai 2006, 14:46
von oscar15
Ja wie gesagt muss das ganze Programm, die Zuweisungen nicht unbedingt, innerhalb einer whilw schleife stellen!

Verfasst: Samstag 27. Mai 2006, 15:43
von Python 47
Spaten hat geschrieben:ich möchte ja damit eine python-Datei Ausführen, allerdings ohne, dass sich das cmd-Fenster gleich wieder schließt.

Hat da jemand ne idee?
Ja klar da gibt es mehrere Möglichkeiten z.b. :

Code: Alles auswählen

import time
time.sleep(10)
Somit bleibt das Fenster 10 Sekunden geöffnet und schließt sich dann

oder du machst:

Code: Alles auswählen

x=raw_input('Zum beenden des Programms drücken sie bitte die Enter-Taste')

Verfasst: Samstag 27. Mai 2006, 18:14
von jens
Es reicht auch einfach nur raw_input(), also ohne "x=" :wink:

Verfasst: Samstag 27. Mai 2006, 19:20
von Python 47
jens hat geschrieben:Es reicht auch einfach nur raw_input(), also ohne "x=" :wink:
Ja ich weiß, aber ich bin es halt gewohnt raw_input() in einer Variablen zu speichern, da ich meistens dann die Variable weiterverwende, z.b. mit einer if abfrage. :wink:

Verfasst: Sonntag 28. Mai 2006, 08:35
von Spaten
auf die Idee bin ich auch schon gekommen, aber wenn das Programm einen Fehler enthält, wird dieser zwar angezeigt aber das Fenster schließt sich so schnell, dass man die Meldung nicht mehr lesen kann....

Verfasst: Sonntag 28. Mai 2006, 09:49
von Roman
Hallo Spaten,
Warum kannst du nicht einfach dein Prgramm vorher auf Fehler überprüfen?
Oder wird erst im Verlauf des Hauptprogramms entschieden, welches Programm ausgeführt werden soll?
Ansonsten fällt mir da auch nichts ein, wie man das Beenden verhindern soll...
Man könnte höchstens stderr manipulieren, so dass die Fehlermeldungen in eine Datei geschrieben werden.
Aber da weiss ich leider nicht genau, wie es geht. :oops:

MfG,
Roman

Verfasst: Sonntag 28. Mai 2006, 11:15
von Python 47
Spaten hat geschrieben:auf die Idee bin ich auch schon gekommen, aber wenn das Programm einen Fehler enthält, wird dieser zwar angezeigt aber das Fenster schließt sich so schnell, dass man die Meldung nicht mehr lesen kann....
Wenn du raw_input bentutzt schließt sich das Fenster nicht.

Verfasst: Sonntag 28. Mai 2006, 11:50
von murph
natürlcih wird es geschlossen, solange dort ein fehler ist; das folgt immer zu einem abbruch des programmes, ob da nun raw_input() steht oder nicht!

Verfasst: Sonntag 28. Mai 2006, 12:02
von Python 47
Dann fängt er halt den Fehler mit try-except ab! :lol:

Verfasst: Sonntag 28. Mai 2006, 12:51
von Leonidas
Dann nutzt doch einfach die Shell, wie im [wiki]FAQ#WieStarteIchSkripte[/wiki] beschrieben. Dann braucht man kein störendes raw_input(), keine Probleme mit Editor-Bugs (siehe IDLE) und die Exceptions sieht man auch.

Verfasst: Sonntag 28. Mai 2006, 17:48
von oscar15
naja wie bereits erwähnt, kommt die console net mit sonderzeichen, wie ä, ö, ß , etc, aus, und wenn eine Variable mit einem Sonderzeichen "versehen" ist, schließt sich die Shell meines Wissen auch!

Verfasst: Sonntag 28. Mai 2006, 18:12
von Leonidas
Warum sollte sie sich schließen, wenn du sie aufgemacht hast? Meine Shell zeigt einfach nur Zeichensalat an, wenn sie mit Umlauten nicht klarkommt Mehr nicht.

Verfasst: Sonntag 28. Mai 2006, 22:28
von Spaten
Das Ding ist, dass ich einen Editor für Py-Dateien schreiben will, der es ermöglicht,
Die Dateien in der Konsole auszuführen...
und beim Ausführen von geschriebenen Scripten sollen Fehlermeldungen angezeigt werden...

Ich weiß, dass es theoretisch gehen muss, ich habe einen anderen Editor, der genau das macht... ich weiß aber leider nicht wie....

Verfasst: Montag 29. Mai 2006, 06:46
von jens
Eine dumme Lösung: Schreib ein Skript "A" drum herrum, welches du von deinem Editor startest. Das Skript "A" hat ein raw_input() am Ende und startet das eigentliche Skript "B"...

Das Script "A" kann ein Python Skript mit subprocess sein oder einfach nur eine BatchDatei unter Windows oder ein sh-Skript unter Linux.

Theroretisch muß Script "A" nicht unbedingt eine seperate Datei sein, sondern dein Editor selber. Dazu kannst du einfach startparameter definieren, die deinem Editor sagt, das es jetzt nicht das Editorfenster aufmachen soll, sondern das angegebene Skript starten soll :lol: