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: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

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
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
Antworten