Syntax um den Workpath auszugeben

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
Benutzeravatar
newbie_needs_help
User
Beiträge: 18
Registriert: Donnerstag 18. Mai 2006, 08:33

Hi,

ich nutze für alle meine Programme/Scripte einen Programmkopf um mich im nachhinein besser zurecht zu finden.

Der Header sieht wie folgt aus:

Code: Alles auswählen

def header():
    import sys
    import datetime
    import time
    
    scriptname = sys.argv[0]
    sys.stderr.write ("## %s\n" % scriptname)
    print "##"
    print "##", scriptname
    print "##"
    t= datetime.datetime.now()
    t2 = time.mktime(t.timetuple())
    now = datetime.datetime.fromtimestamp(t2)
    print "##", now.ctime()
    print "##"
lasse ich das Script in Windows laufen bekomme ich folgenden Ausgabe:

Code: Alles auswählen

## D:\work\bioinformatics\std.py
##
## D:\work\bioinformatics\std.py
##
## Wed Dec  6 16:08:24 2006
##
in Linux wird leider der Pfad in dem das Program liegt weggelassen:

Code: Alles auswählen

## std.py
##
## std.py
##
## Wed Dec  6 16:08:24 2006
##
Kann mir sagen was ich falsch mache?
[img]http://www.danasoft.com/sig/newbieneedshelp.jpg[/img]
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Wenn du in windows auf eine Python Datei klickst wird der Befehl
D:\work\bioinformatics\std.py
ausgeführt, deshalb ist argv[0] == D:\work\bioinformatics\std.py

In Linux wird aber nur std.py als Befehl ausgeführt darum ist arvg[0] == std.py

Lösungsvorschlag, funktioniert aber nur, wenn du auf das File klickst, ob es noch funktioniert, wenn das Modul in einem Unterordner liegt und importiert wurde weiss ich nicht

Code: Alles auswählen

print os.path.realpath(os.curdir)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

newbie_needs_help hat geschrieben:in Linux wird leider der Pfad in dem das Program liegt weggelassen
Hi!

Probier mal ``os.path.abspath()`` aus.

Code: Alles auswählen

import sys
import os
print os.path.abspath(sys.argv[0])
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

...oder "abspath" auf "__file__"

Code: Alles auswählen

print os.path.abspath(__file__)
lg
Benutzeravatar
newbie_needs_help
User
Beiträge: 18
Registriert: Donnerstag 18. Mai 2006, 08:33

Danke für eure Antworten!

Der Befehl

Code: Alles auswählen

import os, sys
print os.path.abspath(sys.argv[0])
funzt wunderbar :)
[img]http://www.danasoft.com/sig/newbieneedshelp.jpg[/img]
Antworten