Programm über Windows Scheduler ausführen

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
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

Hallo Community,

ich bin noch sehr neu hier im Forum und ein Anfänger mit mit Python. Also bittet entschuldigt wenn die Frage so schon eimal gestellt wurde, ich habe leider keine passende Lösung gefunden.

Über ein kleines Programm möchte ich in eine Excel Tabelle (.xlsm) schreiben und lesen. Das Lesen funktioniert soweit wie gewünscht und das Schreiben eigentlich auch.
Allerdings wird würde ich das Programm gerne einmal täglich laufen lassen. Soweit habe ich es auch schon im Windows Scheduler (Windows 10) eingetragen.

Wenn ich das Programm allerdings außerhalb von PyCharm ausführe (über der Scheduler oder auf die Datei "Test.py" klicke), blitzt die Konsole kurz auf. Öffne ich danach die Tabelle, ist die Testzelle (z.B. U48) allerdings nicht beschrieben.

Hier der Code dazu :
++++++++++++++++++++++++
import openpyxl
from pathlib import Path
from openpyxl.cell.cell import Cell
from openpyxl.worksheet.cell_range import CellRange

datei_pfad = Path("C:/Users/...../Test.xlsm")

wb = openpyxl.load_workbook(datei_pfad, keep_vba=True) # öffnet Zusammenfassung
ws = wb["Übersicht"] # wählt Tabelle Übersicht aus

ws['U48'] = " Neuer Test ?"

def isin_abfrage(): # Diese Funktion beinhaltet die Abfrage der ISIN

for i in range(16, 100): # bei mehr als 100 UN muss diese Zahl angepasst werden

isin = ws['U' + str(i)].value

if isin is not None:
print(isin)

isin_abfrage() # startet Funktion
wb.save(datei_pfad)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Habe ich nur einen Denkfehler oder muss ich noch etwas ändern, damit das Programm über den Scheduler oder die Datei im Explorer die Zelle beschreibt ?


Vielen Dank schon im Voraus für eure Hilfe !

PS: sollte das Problem bereits in einem anderen Beitrag gelöst sein, freue mich auch über einen Link :)
Benutzeravatar
darktrym
User
Beiträge: 785
Registriert: Freitag 24. April 2009, 09:26

Was passiert denn wenn der Pfad korrekt angegeben ist oder hast du den für uns geschwärzt?
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@Hannes85: Wie rufst du das Programm auf? Korrekt ist

Code: Alles auswählen

c:\Pfad\zur\python.exe Pfad\zum\script.py
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

darktrym hat geschrieben: Dienstag 5. Januar 2021, 16:56 Was passiert denn wenn der Pfad korrekt angegeben ist oder hast du den für uns geschwärzt?
nicht geschwärzt, einfach alles unnötige weggelassen weil ich zwei Zeilen Pfad doch etwas lang finde
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

sparrow hat geschrieben: Dienstag 5. Januar 2021, 17:07 @Hannes85: Wie rufst du das Programm auf? Korrekt ist

Code: Alles auswählen

c:\Pfad\zur\python.exe Pfad\zum\script.py
ich rufe das Programm auf, indem ich auf die Datei "Test.py" im Explorer doppelt klicke oder den Ausführen Button im Windows Scheduler verwende
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@Hannes85:
Für den Explorer: Dann ist wohl das falsche Programm verknüpft.
Für die Aufgabenverwaltung: Ich habe ja geschrieben, wie man ein Python-Programm startet. Der Befehl muss auch dort so hinterlegt sein. Und zum Testen führst du den Befehl in den Eingabeaufforderung aus.
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

Den Pfad zum Skript hatte ich vorher als Argument eingefügt

Wenn ich ich es so schreibe wie du beschrieben hast, schlägt mir Windows automatisch vor, den Pfad zum Skript wieder als Argument einzutragen. Ignoriere ich den Vorschlag, kommt die Meldung: "System kann den Dateipfad nicht finden"
Zusätzich habe ich die If Verzweigung sowie den Print Befehl entfernt, danach wird das Programm zwar ausgeführt aber nicht beendet und in die Excel Tabelle wird auch nicht geschrieben.

Ich habe jetzt versucht: - das Programm im Explorer über Rechtsklick "öffnen mit" Python zu starten -> kein Erfolg ( schwarze Python Shell blitzt kurz auf, aber kein Eintrg in der Tabelle)
- das Programm über Rechtsklick "Edit with IDLE 3.9" und dann in der IDLE auf "RUN" -> Fehler in Bezug auf "import openpyxl" (1.Zeile)
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Ich habe doch geschrieben, dass du es in der Eingabeaufforderung starten sollst.
Bitte erkläre nicht, was dann passiert, sondern kopiere alles aus der Eingabeaufforderung (inklusive des Aufrufs) und füge es hier in einem Beitrag ein.
Copy&Paste. Kein Abtippen, kein Beschreiben.
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

Ich weiß leider nicht wie ich in der CMD das Programm starten kann
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du tippst in der Sucheingabe von Windows "CMD.EXE" und startest die. Und dann fuehrst du C:\Pfad\Zu\Python\Python.exe C:\Pfad\Zum\Skript.py aus.
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

Eingabe: C:\Users\Hannes>C:\Users\Hannes\AppData\Local\Programs\Python\Python39\python.exe C:\Users\Hannes\Desktop\Arbeit\Finanzen\Programme\Kurse automatisch aktualisieren\Kurse aktualisieren.py
Ergebnis: C:\Users\Hannes\AppData\Local\Programs\Python\Python39\python.exe: can't open file 'C:\Users\Hannes\Desktop\Arbeit\Finanzen\Programme\Kurse': [Errno 2] No such file or directory

Das funktioniert leider nicht, was kann ich daran ändern ?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

"" um den Pfad packen, weil du Leerzeichen in dem Pfad hast.
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

C:\Users\Hannes>"C:\Users\Hannes>C:\Users\Hannes\AppData\Local\Programs\Python\Python39\python.exe C:\Users\Hannes\Desktop\Arbeit\Finanzen\Programme\Kurse automatisch aktualisieren\Kurse aktualisieren.py"
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe ja auch nicht gesagt, dass du um DAS GESAMTE DING Anfuehrungszeichen machen solltst. Das sind zwei Pfade. Nicht ein einziger. Also "" nur um den zweiten.

Ein bisschen mehr Experimentierfreude und Aufmerksamkeit beim lesen der Fehlermeldungen (ist ploetzlich anders, nix mehr mit errno, weil Python nicht mehr gestartet wird) ist schon hilfreich.
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

auf diese weise hatte ich davor probiert, allerdings kam da der selbe Fehler. Ich vermute ich hatte noch ein Leerzeichen ganz am Anfang.

C:\Users\Hannes>C:\Users\Hannes\AppData\Local\Programs\Python\Python39\python.exe "C:\Users\Hannes\Desktop\Arbeit\Finanzen\Programme\Kurse automatisch aktualisieren\Kurse aktualisieren.py"
Zugriff verweigert
ArashiTok
User
Beiträge: 11
Registriert: Montag 19. Juni 2017, 14:06

Ich würde Python in die Umgebungsvariable packen normal macht der das doch mittlerweile bei der installation?
Und den .py anhang Python zuweisen.

Dann spart man sich das ganze mit der pfadangabe zur python.exe
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@ArashiTok: Zwei Gegenargumente:
1.: Man weiß so, welchen Interpreter man ausführt
2.: In der Aufgabenverwaltung msus er das auf jeden Fall so starten.

@Hannes85: Dann musst du jetzt herausfinden, warum das nicht funktioniert.
1. Schritt: In der dem Script als erste Zeile einen print-Befehl einsetzen, der dir zeigt, ob es überhaupt gestartet wurde.
2. Schauen ob die python.exe ohne Script als Argument startet
Hannes85
User
Beiträge: 9
Registriert: Dienstag 5. Januar 2021, 15:58

1. schon der Pfad zur python.exe funktioniert nicht --> Zugriff verweigert
2. Python neu installiert --> Pfad funktioniert
3. Pfad zur auszuführenden Datei angefügt --> "Module openpyxl not found"

C:\Users\Hannes>C:\Users\Hannes\AppData\Local\Programs\Python\Python39\python.exe
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

C:\Users\Hannes>C:\Users\Hannes\AppData\Local\Programs\Python\Python39\python.exe "C:\Users\Hannes\Desktop\Arbeit\Finanzen\Programme\Kurse automatisch aktualisieren\Kurse aktualisieren.py"
Traceback (most recent call last):
File "C:\Users\Hannes\Desktop\Arbeit\Finanzen\Programme\Kurse automatisch aktualisieren\Kurse aktualisieren.py", line 1, in <module>
import openpyxl
ModuleNotFoundError: No module named 'openpyxl'

Wie geht das ? In Pycharm habe ich doch alle Module installiert
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Deshalb ist es wichtig, das Programm auf der Kommandozeile zu starten. Denn nur da bekommst du die entsprechenden Fehlermeldungen, die die Aufgabenverwaltung nicht bringen kann.

Ich kenne Pycharm nicht, weil ich ohne IDE arbeite.Wenn ich die Beiträge über Pycharme hier richtig im Kopf habe, dann legt Pycharm für jedes Projekt eine eigene Umgebung an. Informier dich über "venv" bzw. "virtualenv" bzw. "viruelle Environments." Daran liegt es.
Antworten