Seite 1 von 1

Ausführbar machen/ Ort des Skripts (2 Themen)

Verfasst: Samstag 31. Januar 2004, 03:59
von david
hi!
Ich versuche gerade verzweifelt meine python Skript ausführbar zu machen.

Code: Alles auswählen

#!/usr/bin/env python

Steht in der ersten Zeile im Skript.
Mittels chmod 0755 cdlabel.py hab ich das Skript ausfürhbar gemacht aber nix tut sich, wenn ich es als user aufrufe. Als root geht es problemlos. :?

Mittels Konsole und python cdlabel.py geht es auch für den user.

Hat jemand eine Idee, wo der Fehler liegt?

Grüße, david

Re: Ausführbar machen

Verfasst: Samstag 31. Januar 2004, 08:13
von Voges
Hallo!
david hat geschrieben:Mittels chmod 0755 cdlabel.py hab ich das Skript ausfürhbar gemacht aber nix tut sich,
Wenn sich nix tut, dann kann es nur ein Fehler im eigentlichen Script sein. Ein Fehler auf Shell-Ebene einschließlich der #!-Zeile würde Linux/Unix auf jeden Fall mit einer Fehlermeldung quittieren.

Jan

Nachtrag: Du hast das Script nicht zufällig test genannt? ;-)

Verfasst: Samstag 31. Januar 2004, 09:26
von oenone
wie versuchst du es zu starten ?

durch cdlabel.py ? probier es mal mit ./cdlabel.py

auf bald
oenone

Verfasst: Samstag 31. Januar 2004, 10:21
von david
david hat folgendes geschrieben::
Mittels chmod 0755 cdlabel.py hab ich das Skript ausfürhbar gemacht aber nix tut sich,
damit meinte ich, dass ich es nicht als user ausführen kann.
Nachtrag: Du hast das Script nicht zufällig test genannt?
Nein.
probier es mal mit ./cdlabel.py
So geht es auch als user.

Hört sich jetzt vielleicht doof an, aber ich hätte auch ganz gerne, dass es startet, wenn ich mit der Maus draufklicke (als user), das tuts nämlich immer noch nicht, nur als root.

Grüße, david

Verfasst: Samstag 31. Januar 2004, 18:26
von david
So, es geht jetzt. Kann aber leider nicht genau sagen, woran es gelegen hat.
Zuerst dachte ich, der user hätte zuwenig Rechte auf /usr/bin/env oder python. Eine Änderung hat nix gebracht.

Nachdem ich aber auf dem Desktop einen Starter eingerichtet hatte, gings plötzlich auch bei direktem Mausklick.

Trotzdem danke für Eure Hilfe.

Grüße, david

Verfasst: Montag 2. Februar 2004, 23:45
von hans
Es läuft zwar schon bei dir, aber ich versuch's trotzdem noch einmal.

Maßgeblich, ob ein Programm oder Script gefunden wird, ist die Variable $PATH. Diese wird meistens beim Login erzeugt, kann aber auch während der Laufzeit verändert werden. Beim Login werden nacheinander diverse Dateien durchlaufen, wie /etc/profile, /etc/bash.rc, ~/.profile und / oder ~/.bash.rc In allen Scripts kann die Varialble erweitert werden. Welche Scripts durchlaufen werden, hängt immer ein Bisschen von den Logineinstellungen ab.

In einigen Distris kann angegeben werden, ob der Pfad das jeweils aktuelle Directory enthalten soll, bei anderen verzichtet man aus Sicherheitsgründen darauf. Das aktuelle Directory ist mit ......:.:....... (Doppelpunkt - Punkt [Doppelbunkt]) angegeben. Am Besten, du schaust dir die Variable einmal in der Konsole an: echo $PATH

Lange Rede, kurzer Sinn: Wenn deine ausführbare Datei in einem in $PATH enthaltenen Verzeichnis steht, dann kannst du auf Pfadangaben verzichten, sonst mußt du ihn angeben. Der ./ in einer Shell, ersetzt dieses mit dem aktuellen Directory.

Hans

Verfasst: Freitag 6. Februar 2004, 00:08
von david
Ich bins wieder.

Hab jetzt mein Skript mit Tkinter-Gui in einer ersten Rohversion fertiggestellt.
Das Skript fragt über die widgets ein paar sachen ab und gibt diese als Argument dann an das Programm cdlabelgen weiter, welches mir dann ein Cd-Cover erstellt.
Das funktioniert auch, solange ich das aus der konsole starte (./meinSkript.py).

Starte ich es aber, indem ich mit der Maus draufklicke, öffnet sich zwar das Fenster der Gui, aber wenn ich Eingaben vornehme und abschließend auf "Label erstellen" klicke (und somit die Eingaben an cdlabelgen weiterleite) passiert nix, d.h. die Ausgabe wird nicht erstellt.
Zur info vielleicht noch:
befehl='cdlabelgen -c "' + Interpret + '" -s "' + Titel + '" -D -i "' + titel +'"' + ' -o ' + ausgabedatei
os.system(befehl)
Damit rufe ich das Programm auf.
Hat jemand eine Idee, warum das Skript in der beschriebenen Weise nicht funktioniert?

Grüße, david

Verfasst: Freitag 6. Februar 2004, 00:41
von Dookie
mal befehl='/usr/bin/cdlabelgen -c "' + Interpret + '" -s "' + Titel + '" -D -i "' + titel +'"' + ' -o ' + ausgabedatei versuchen
ich hoffe ausgabedatei hat dann auch den ganzen Pfad, sonst schreibt er dir es sonstwo hin.


Gruß

Dookie

Verfasst: Freitag 6. Februar 2004, 00:49
von david
Hi!
Danke für Deine Antwort.
Gebe ich den ganzen Pfad an (sowohl bei cdlabelgen als auch bei ausgabedatei) schreibt er es nach wie vor nur, wenn ich er aus der Konsole aufrufe.

Sonst noch eine Idee?

Grüße, david

Verfasst: Sonntag 8. Februar 2004, 13:47
von david
So, ich hab mich nochmal ein wenig auf Fehlersuche begeben und ich denke, ich hab den Fehler gefunden. Allerdings macht mir das Umgehen Schwierigkeiten.

Mittels
glob.glob('*.txt')
greife ich auf alle Textdateien im aktuellen Verzeichnis zu. Nun ist mein Skript so gedacht, dass man eine Textdatei in das Verzeichnis des Skripts legt und dann von irgendwo auf das Skript zugreift. Daher der Fehler des nicht ausführens.

Nun wäre
os.path.abspath('...../meinskipt.py')
eine Möglichkeit, aber das ist mir zu Fehleranfällig (was, wenn das Skript zweimal irgendwo liegt?). Gibt es eine andere Möglichkeit, dem Skirpt mitzuteilen, wo es liegt (Verzeichnis), um diese Ort im Skript zu verwenden?

Grüße, realemu

Verfasst: Sonntag 8. Februar 2004, 14:25
von Voges
david hat geschrieben:Gibt es eine andere Möglichkeit, dem Skirpt mitzuteilen, wo es liegt (Verzeichnis), um diese Ort im Skript zu verwenden?
Ich nehme dafür immer
scriptLocation = os.path.abspath(os.path.dirname(sys.argv[0]))
Ob das in absolut allen Fällen (unter allen OS) funktioniert, weiß ich aber nicht.
Jan

Verfasst: Montag 9. Februar 2004, 11:15
von david
Danke!
Genau das sollte mir weiterhelfen....!

Grüße, david