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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

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
Zuletzt geändert von david am Sonntag 8. Februar 2004, 14:05, insgesamt 1-mal geändert.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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? ;-)
oenone
User
Beiträge: 75
Registriert: Mittwoch 27. August 2003, 14:39
Wohnort: 49°17'28N, 8°15'57E
Kontaktdaten:

wie versuchst du es zu starten ?

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

auf bald
oenone
if you don't remember something, it never happened.
if you aren't remembered, you never existed.
i don't quite understand what love is like... but if there was someone who liked me, i'd be happy.
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

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
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

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
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

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
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

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
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

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
david
User
Beiträge: 30
Registriert: Montag 12. Januar 2004, 14:40

Danke!
Genau das sollte mir weiterhelfen....!

Grüße, david
Antworten