Seite 1 von 1

IDLE - Aufruf mit os.system

Verfasst: Sonntag 13. August 2006, 13:13
von Hannes-Spz
Hi!
Ich hab mal in der regedit geschaut, wie der command für den Befehl "Open with IDLE" sei, den man erhält, wenn man mit der rechten Maustaste auf eine .py(w) klickt...

Ergebnis: "*pythonw.exe ... lib\idlelib\idle.pyw -n -e"
nun habe ich es versucht mit der os.system-fkt nachzubauen:

Code: Alles auswählen

from Tkinter import *
from os import system
stdpath = "C:\\Python24\\"
def startnewshell(modulpath=""):
    global stdpath
    system(stdpath + "pythonw " + stdpath + r"lib\idlelib\idle.pyw -n -e " + modulpath)
    
root = Tk()

bu_startnewshell = Button(root, text = "Neues Editorfenster", command = startnewshell)
bu_startnewshell.pack()
root.mainloop()
Die IDLE öffnet sich zwar, aber mein tk-fenster hängt sich auf...
liegt das vl. daran, dass die IDLE mit Tkinter geproggt wurde und nun zwei mainloops laufen?

Verfasst: Sonntag 13. August 2006, 15:13
von DatenMetzgerX
bei os.system wartest du auf die Antwort des aufgerufenen Befehls und die bekommst du erst, wenn die IDLE sich wieder beendet hat.

Verfasst: Sonntag 13. August 2006, 17:40
von Python 47
Wenn ich das richtig verstandne habe, könntest du das mit threads lösen. :?

Verfasst: Sonntag 13. August 2006, 18:14
von Michael Schneider
Hi Hannes,

beeindruckend diese Herangehensweise. :-)
Du musst den Aufruf nur als neuen Thread ausführen, dann kannst Du auch weitere Fenster öffnen. Am einfachsten so:

Code: Alles auswählen

from Tkinter import *
from os import system
from thread import start_new_thread as snThread

stdpath = "C:\\Python24\\"
def startnewshell(modulpath=""):
    snThread(system, (stdpath + "pythonw " + stdpath + r"lib\idlelib\idle.pyw -n -e " + modulpath,))
   
root = Tk()

bu_startnewshell = Button(root, text = "Neues Editorfenster", command = startnewshell)
bu_startnewshell.pack()
root.mainloop()
Grüße,
der Michel

Verfasst: Sonntag 13. August 2006, 19:48
von Hannes-Spz
wow... das es so tiefgreifend wird, wusste ich nicht... :)

ich habe gerade kein python da - aber sobald ich zuhause bin, versuche ich es!
geht es aber nicht auch irgendwie mit spawn* irgendwo in os oder muss man unbedingt diese threads nehmen?

vielen dank für die schnellen aws!
lg hannes

Verfasst: Sonntag 13. August 2006, 20:35
von Michael Schneider
Hi Hannes,

das ist dasselbe Kind mit anderem Namen. Spawn, Fork und Threads - alle erzeugen Subprozesse. Fork gibt's (war zumindest mal so) nur für UNIX und spawn führt Dateien aus. Für Funktionen/Methoden fährst Du mit start_new_thread am besten, behaupte ich kühn.

Grüße,
Michael

Verfasst: Sonntag 13. August 2006, 23:23
von Hannes-Spz
es klappt ausgezeichnet! :D
es gibt aber noch einen gewaltigen schönheitsfehler...:
das schwarze fenster (cmd), welches sich dabei öffnet - kann man das nicht umgehen? (obwohl ich mal annehme: nein, da die cmd ja wiederum auf das schließen der idle zu warten scheint) hat jemand ne idee noch dazu?!
(echt schon mal tausend dank, dass ihr mir bisher so gute tipps gegeben habt :) )

Verfasst: Montag 14. August 2006, 16:52
von Python 47
probier das ganze mal mit os.startfile('Pfad und Name der zu öffnenden Datei') anstatt os.system()

Verfasst: Dienstag 15. August 2006, 14:32
von Hannes-Spz
aber wie kann ich da die argumente angeben??