manuelle Ausführung klappt, als Cronjob nicht

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Dienstag 6. Februar 2007, 11:34

Hi,
habe kleines Problem mit Python-Script als Cronjob:
Wenn ich es manuell ausführe, wird korrekt der Folder des Scriptes ermittelt. Wenn ich es als Cronjob ausführen lasse, liefert "av = string.split(arbeitsverzeichnis,'/')" , ' ', also nichts.

manuell ausgeführt werden Teilpfade richtig gesplittet:

Code: Alles auswählen

/root/Test            # Arbeitsverzeichnis
['', 'root', 'Test']   # av
Test/                  # Scriptfolder
Wo könnte das Problem liegen ?

Hier der Dreizeiler zum Pfadsplitting:

Code: Alles auswählen

arbeitsverzeichnis = os.getcwd()               
av = string.split(arbeitsverzeichnis,'/')    
clientfolder = av[len(av)-1]  + '/' 


Gruss, Seven
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 6. Februar 2007, 11:57

Wow, was machst du denn da?

Also generell würde ich das av = string.split(arbeitsverzeichnis,'/') so machen: av = arbeitsverzeichnis.split("/")...

Warum aber nicht os.path.split() nehmen? Also so:

Code: Alles auswählen

import os

arbeitsverzeichnis = "/test/foo/bar"
clientfolder = os.path.split(arbeitsverzeichnis)[1] + "/"
print clientfolder

btw. lass dir doch einfach mal das os.getcwd() ausgeben, oder schreib es in eine Log-Datei...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Dienstag 6. Februar 2007, 16:54

jens hat geschrieben:Warum aber nicht os.path.split() nehmen?
kenn ich nicht, probiers aber gerne mal aus.
jens hat geschrieben: btw. lass dir doch einfach mal das os.getcwd() ausgeben
Hab ich. Da steht als Cronjob '/root' drin, sonst '/root/Test'.
Gruss, Seven
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 6. Februar 2007, 17:13

Wie wäre es, du startest dein Skript mit einem Parameter, der den Pfad angibt?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Dienstag 6. Februar 2007, 19:28

ja, so hatte ich es auch bislang und wollte optimieren:

Ich habe verschiedene Clienten auf dem Server. Jedem sind ein eigener CGI-Subfolder, ein HTML-Subfolder und ein Cronjob-Subfolder zugeordnet, die nach ihm benannt sind. Um beim Erstellen eines neuen Kunden die Pfade nicht aktualisieren zu müssen, leiten sich die Scripte den Namen ihres zugehörigen CGI-, HTML und Cronjob -Subfolders aus dem Namen ihres eigenen Sourceordners her. Klappt ja auch super, nur als Cronjob nicht. Und ich dachte, vieleicht kennt jemand das Problem ? Zumal es ja von der Shell aus gestartet tut was es soll. Mysteriös ....

Gruss, Seven
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 6. Februar 2007, 20:32

Ich tippe mal darauf, dass os.getcwd() etwas anderes liefert, als du gerne hättest - denn es ist ja nirgendwo gesagt, dass Cron bevor er das Skript startet in den Ordner des Skriptes wechselt. Genauso gut kann das WD auch / sein. Solltest du mal mit ``print os.getcwd()`` prüfen.

Ansonsten würde ich so eine Variante nutzen (vorrausgesetzt der Pfad endet nicht mit einem Slash):

Code: Alles auswählen

In [13]: system_path = '/root/Test'
In [14]: import os
In [15]: os.path.basename(system_path)
Out[15]: 'Test'
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten