• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Python Programme ohne Terminalfenster aus dem Finder starten

RUN/DOS/RUN

Allington Pepping
Registriert
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?
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ist es eine Konsole von OS X, oder von Deinem Programm?

Alex
 

RUN/DOS/RUN

Allington Pepping
Registriert
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)
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
 

RUN/DOS/RUN

Allington Pepping
Registriert
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?
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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
 

RUN/DOS/RUN

Allington Pepping
Registriert
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.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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"
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
Das ganze zu packen wäre auch eine Möglichkeit, wie geht das am besten?
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
 

Skeeve

Pomme d'or
Registriert
26.10.05
Beiträge
3.120
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.
S.o. Damit mußt Du nichts installieren. Wenn der ScriptEditor da ist, kannst Du loslegen.
 

RUN/DOS/RUN

Allington Pepping
Registriert
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