1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Python Programme ohne Terminalfenster aus dem Finder starten

Dieses Thema im Forum "AppleScript" wurde erstellt von RUN/DOS/RUN, 01.06.08.

  1. RUN/DOS/RUN

    RUN/DOS/RUN Allington Pepping

    Dabei seit:
    29.10.07
    Beiträge:
    193
    Hallo,

    ich möchte ein Python-Programm (mit Tkinter für die Benutzeroberfläche) möglichst komfortabel unter OS X aus dem Finder starten können, damit es auch von Kommilitonen an Uni-iMacs (OS X 10.4, Python 2.3) verwendet werden kann, ohne das Terminal zu benutzen.

    Ich verwende den Shebang
    Code:
    #!/usr/bin/env pythonw
    und habe die Datei ausführbar gemacht ( chmod + *.pyw). Aus dem Terminal klappt das Starten auch problemlos und es wird nach dem Programmstart nur die GUI angezeigt:
    Code:
    pythonw meinprogramm.pyw
    // oder auch
    ./meinprogramm.pyw
    Wenn ich das Programm per Doppelklick im Finder aufrufe, startet er das Skript allerdings mit einer zusätzlichen Konsole, die störend ist, weil sie teilweise die GUI komplett verdeckt.

    Hat jemand einen Tipp für mich, wie ich aus dem Finder nur das eigentliche Programm ohne ein zusätzliches Terminalfenster starten kann und warum das Programm beim Aufruf im Finder anders ausgeführt wird als vom Terminal aus?
     
  2. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Ist es eine Konsole von OS X, oder von Deinem Programm?

    Alex
     
  3. RUN/DOS/RUN

    RUN/DOS/RUN Allington Pepping

    Dabei seit:
    29.10.07
    Beiträge:
    193
    Mein Programm macht keine Konsolenausgabe. Ich vermute es ist eine Konsole von OS X , da mein Programm geschlossen wird, wenn ich die Konsole schließe. Und dieses Fenster taucht auch nur auf, wenn ich das Programm aus den Finder starte. (Ich habe im Moment keinen Mac da, werde mal bei Gelegenheit in der Uni genauer nachsehen)
     
  4. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Das hier in den AppleScript Scripteditor kopieren und als Programm sichern.

    Code:
    on run
        do shell script quoted form of "/pfad/zu/Deinem/Script"
    ens run
    Du kannst natürlich, wenn Du Dein Script nicht über das Terminal aufrufen willst, sondern nur per Doppelklick, das ganze in eine Programm Bundle packen. Sag, wenn Du das möchtest.
     
  5. RUN/DOS/RUN

    RUN/DOS/RUN Allington Pepping

    Dabei seit:
    29.10.07
    Beiträge:
    193
    Hallo Skeeve, vielen Dank für deinen Vorschlag.
    Die Lösung per AppleScript klingt interessant, das werde ich im Verlauf der Woche mal ausprobieren. Gibt es da eine Möglichkeit den Pfad auf das aktuelle Verzeichnis zu beziehen?

    Das ganze zu packen wäre auch eine Möglichkeit, wie geht das am besten? Unter Windows habe ich das mit Py2exe schon mal gemacht, gibt es da etwas vergleichbares für OS X?
     
  6. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Es müsste auch gehen, wenn Du Deine Exe in ein Application Bundle steckst

    Dazu kannst Du in Xcode z.B. eine Carbon Application machen, bauen (mit dem Sample Code) und dann das Executable ersetzen und in der Plist den richtigen Namen eintragen.

    Alex
     
  7. RUN/DOS/RUN

    RUN/DOS/RUN Allington Pepping

    Dabei seit:
    29.10.07
    Beiträge:
    193
    Gibt es da auch eine Lösung, mit der ich das Paket unter Linux oder Windows bauen kann? Auf den Macs an der Uni kann ich leider keine Software installieren.
     
  8. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Lästerliche Häresie!

    Aber natürlich, einen AppWrapper kannst Du unter jedem OS Bauen, das sind nur Ordnerstrukturen und bestimmte Dateien. Allerdings ist es am leichtesten erklärt wenn Du Dir einen einfachen App Wrapper anschaust.

    Alex

    EDIT: Und natürlich :"C:\DOS\RUN"
     
  9. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Am Besten? Keine Ahnung, aber mit meinem appMaker geht es einfach:
    Code:
    --
    -- appMaker © 2008 by Skeeve
    -- appMaker.question.Skeeve at xoxy dot net
    --
    -- Drag & Drop eines Shell-Scripts
    -- oder "shell executables" auf appMaker
    -- erzeugt ein doppelklickbares Programm-Bundle
    -- auf dem Desktop
    --
    -- ToDo:
    -- Droplet erstellen.
    --  
    property target : "~/Desktop"
    property directory : "MyScript"
    
    on run
    	tell me to open {choose file}
    end run
    
    on open an_item
    	-- Nur eine Datei?
    	if (count of an_item) ≠ 1 then
    		display alert "Nur eine Datei bitte!" as critical
    		error -128
    	end if
    	set an_item to first item of an_item
    	-- Informationen holen?
    	set information to info for an_item
    	-- Verzeichnisse sind unzulässig
    	if folder of information then
    		display alert "Bitte keine Verzeichnisse!" as critical
    		error -128
    	end if
    	-- Ausführbar muß die Datei auch sein
    	try
    		do shell script "test -x " & quoted form of POSIX path of an_item
    	on error
    		display alert "»" & (POSIX path of an_item) & "« ist keine ausführbare Datei" as critical
    		error -128
    	end try
    	set appname to name of information
    	-- Extension vorhanden?
    	if name extension of information is not missing value then
    		-- Aber bitte nicht .app!
    		if name extension of information is "app" then
    			display alert "app ist keine unterstützte extension" as critical
    			error -128
    			
    		end if
    		-- Extension abschneiden
    		set l to length of name extension of information
    		set appname to text 1 thru (-2 - l) of appname
    	end if
    	-- appname vervollständigen
    	set appname to target & "/" & (quoted form of appname) & ".app"
    	-- Zielverzeichnis vervollständigen
    	set dir to appname & "/Contents/Resources/" & quoted form of directory
    	-- Los geht's
    	-- 1. Compilieren
    	-- 2. Verzeichnis anlegen
    	-- 3. Kopieren
    	do shell script "osacompile -o " & appname & " -e " & quoted form of ("
    		on run
    			do shell script quoted form of ((posix path of (path to resource \"" & directory & "\")) & (\"" & name of information & "\"))
    		end") & ";
    		mkdir " & dir & ";
    		cp " & (quoted form of POSIX path of an_item) & " " & dir
    end open
     
  10. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    S.o. Damit mußt Du nichts installieren. Wenn der ScriptEditor da ist, kannst Du loslegen.
     
  11. RUN/DOS/RUN

    RUN/DOS/RUN Allington Pepping

    Dabei seit:
    29.10.07
    Beiträge:
    193
    Problem gelöst.

    Hallo Skeeve,
    wenn ich die zusätzlichen Python Module, die ich verwende, in die App kopiere, funktioniert alles einwandfrei.

    Das Konsolenfenster war offenbar von Python, wurde aber beim Aufruf des Programms aus dem Finder in einem Terminalfenster angezeigt. Ich habe jetzt den Fehler gefunden. Wenn ich diese Funktion im Programm aufrufe, wird die Konsole nicht mehr angezeigt:

    Code:
    def [B]hideTkConsole[/B](root): 
        try: 
            root.tk.call('[B]console[/B]', '[B]hide[/B]') 
        except: 
            pass 
    Scheint wohl eine Besonderheit von Tkinter unter OS X zu sein. (Bug oder Feature :innocent:)

    Auf jeden Fall vielen Dank für deine guten Vorschläge und für dein Skript.

    Alexander
     

Diese Seite empfehlen