Python auf DS: Unterschiedliches Verhalten bei Ausführung via Job oder manuell

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Asthos

Benutzer
Registriert
18. Aug. 2017
Beiträge
18
Reaktionspunkte
0
Punkte
1
Hallo in die Runde,

mir ist heute beim Erstellen/Testen etwas aufgefallen, was ich mir nicht erklären kann.
Ich konnte den Fehler auch eingrenzen und auf folgendes Python-Script "test.py" runterbrechen:
Rich (BBCode):
#!/usr/local/bin/python3
import os
print(os.path.abspath("."))

wenn ich deisen Code via User ausführe (SSH) sieht es so aus:
Rich (BBCode):
Job@DS:~/Projekt$ python3 test.py
/volume1/homes/Job/Projekt
man erkennt, dass der Befehl os.path.abspath(".") den aktuellen Pfad ausgibt.

Nun wollte ich diese Datei via Aufgabenplaner ausführen lassen,
dazu habe ich folgendes benutzerdefiniertes Script im Aufgabenplaner:
Rich (BBCode):
/usr/local/bin/python3.5 /volume1/homes/Job/Projekt/test.py >> /volume1/homes/Job/Ausgabe/py_testfile.txt
Wenn ich es laufen lasse, kommt dann aber als Ergebnis:
Rich (BBCode):
/volume1/homes/Job
D.h. es fehlt der Ordner "Projekt" in dem das Script ausgeführt wird. :confused:

Kennt jemand hier den genaueren Hintergrund, warum auf einmal ein anderer Pfad mitgegeben wird, wenn man einmal per Job es plant.
Es ist etwas unschön, da ich diverse Sachen (.ini lesen und .log-Datei erstellen) dynamisch erzeuge, da Programmierer ja faul sind und Copy-Paste bevorzuge.

Getestet wurde es auf der DS116 falls es noch jemanden interessiert.
 
Die Faulheit fällt dir jetzt auf die Füße. Beim Start über die SSH hast du vor dem Programmstart dafür gesorgt, das ~/job das aktuelle Verzeichnis ist. Tue das auch im Aufgabenplaner. Oder schreibe dein Programm so um, dass es egal ist, welches Verzeichnis das aktuelle ist.
 
oder wechsle im Script oder beim Aufruf vorher in das Scriptverzeichnis
 
Wo ist denn da genau mein Fehler?
Wenn ich überSSH drin bin, habe ich dafür gesorgt, dass ich im Ordner "Projekt" bin, also im Unterordner von "Job", denn im Ordner Projekt liegt auch die Python datei. Somit ist das via SSH auch nachvollziehbar, das der Befehl os.path.abspath(".") den Unterordner "Projekt" anzeigt.

Die Frage ist, warum im Aufgabenplaner nicht der Ordener "/volume1/homes/Job/Projekt" mit angezeigt wird, sondern nur der "/volume1/homes/Job" Ordner.
Wird denn jedes Script dass man im Aufgabenplaner ausführt dann direkt im eigenen Home-Verzeichnis ausgeführt, egal wo die Script-Datei liegt?
 
Genau, das Arbeitsverzeichnis ist das jeweilige Homeverzeichnis. Das Python Script zeigt ja nur das aktuelle Arbeitsverzeichnis an und das ist da, von wo der Python Interpreter aufgerufen wird und nicht da wo das Script liegt
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat