Shell-Skripte ausführen, als würden sie manuell gestartet

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
Tekl
User
Beiträge: 7
Registriert: Dienstag 4. März 2008, 17:27

Hi,

Wenn ich ein Shell-Skript aus Python aufrufen, bekomme ich folgende Fehlermeldung:
seek() on closed filehandle ARGV at /Developer/Extras/Dictionary Development Kit/bin/make_line.pl line 55, <> chunk 44318.
Ich verwende dabei den Befehl subprocess.call(), aber auch mit den anderen Varianten wie os.popen (Zusätzlich mit Broken-pipe-Fehlern) oder os.system klappt es nicht.

Ich arbeite unter OS X 10.5.2

Tekl
Tekl
User
Beiträge: 7
Registriert: Dienstag 4. März 2008, 17:27

Evtl. ist wichtig zu erwähnen, dass ich das Skript mit Befehl+R direkt aus Textmate starte. Wenn ich das Skript per Doppelklick starte ist das Arbeitsverzeichnis mein Benutzerordner und nicht das Verzeichnis wo das Skript liegt.

Wie komme ich denn daran?
Tekl
User
Beiträge: 7
Registriert: Dienstag 4. März 2008, 17:27

Ich habe mir die letzte Frage bereits selber beantworten können.

Mit

Code: Alles auswählen

os.chdir( os.sep.join(sys.argv[0].split(os.sep)[:-1]) )
wird auch beim Doppelklick ein Skript in dem Verzeichnis ausgeführt, wo es liegt. Vermutlich gibt's aber auch eine einfachere Lösung, denn besonders elegant, lesbar und vor allem merkbar ist das nicht gerade.

Ich dachte, wenn ich das Skript per Doppelklick starte, kommt keine Fehlermeldung. Leider doch.

Meine ursprüngliche Frage ist also noch nicht geklärt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wie wäre es damit:

Code: Alles auswählen

os.path.split(os.path.abspath(sys.argv[0]))[0]

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Tekl
User
Beiträge: 7
Registriert: Dienstag 4. März 2008, 17:27

Naja, nicht viel besser. Gibt's dafür keine Befehle wie in PHP?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

jens hat geschrieben:Wie wäre es damit:

Code: Alles auswählen

os.path.split(os.path.abspath(sys.argv[0]))[0]
entspricht

Code: Alles auswählen

os.path.dirname(os.path.abspath(sys.argv[0]))
MfG
HWK
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ahja, stimmt... Im os.path modul sind doch immer wieder einige nette Dinge zu finden ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

An den Dateinamen eines Moduls kommt man auch über das `__file__`-Attribut des Moduls heran.
Antworten