Seite 1 von 1

Syntax um den Workpath auszugeben

Verfasst: Mittwoch 6. Dezember 2006, 16:15
von newbie_needs_help
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?

Verfasst: Mittwoch 6. Dezember 2006, 17:34
von DatenMetzgerX
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)

Re: Syntax um den Workpath auszugeben

Verfasst: Mittwoch 6. Dezember 2006, 18:07
von gerold
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
:-)

Verfasst: Mittwoch 6. Dezember 2006, 18:38
von sape
...oder "abspath" auf "__file__"

Code: Alles auswählen

print os.path.abspath(__file__)
lg

Verfasst: Donnerstag 7. Dezember 2006, 08:28
von newbie_needs_help
Danke für eure Antworten!

Der Befehl

Code: Alles auswählen

import os, sys
print os.path.abspath(sys.argv[0])
funzt wunderbar :)