__blackjack__ hat geschrieben: Mittwoch 19. Juni 2019, 23:26
Wie gesagt, am besten gar nicht machen. Ansonsten würde ich das nicht selbst programmieren sondern etwas fertiges nehmen. So spontan würde mir `click` einfallen. Das macht auch das richtige – nämlich nichts – wenn die Standardausgabe kein Terminal ist. `click` ist allerdings hauptsächlich für eine API mit Argumenten/Optionen. Falls Dein(e) Programm(e) interaktiver sind, könntest Du Dir beispielsweise `prompt_toolkit` anschauen.
@blackjack Danke für den Tip 'prompt_toolkit' sieht extrem vielversprechend aus.
Ist dann auch eine gute Möglichkeit meinen jetzigen Code neu aufzubauen und zu strukturieren.
Denn momentan sieht man ihm sehr an, dass ich da immer wieder sachen zwischengeschmissen habe.
Hier einmal mein Code
PS: Bitte nicht wundern die Pfade musste ich herauskürzen
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Spyder Editor
Bereinigung
"""
import shutil
import os
import time
import win32api
import win32con
import sys
import subprocess
from datetime import datetime
benutzer = os.getlogin()
path_cache = os.environ['K_PATH'] + ""
path_temp = "C:\\Users\\" + benutzer + ""
path_Logfile = ("C:\\Users\\" + benutzer + "\\Desktop\\LogFile_bereinigung")
Logfile = (path_Logfile + "\\LogFile.txt")
if not os.path.exists(path_Logfile):
os.mkdir(path_Logfile)
Logfile = open(Logfile,"a")
else:
Logfile = open(Logfile,"a")
def updateinfo():
print("Kommt noch")
input()
def info():
os.system("cls")
print("""Bei Ausführung der Bereinigung werden bestimmte prozesse beendet.
\nDaher ist es wichtig alle Daten vorab zu Speichern!!!\nDer Rechner wird nach Abschluss der Bereinigung neu gestartet!!!!
\nUm in das Menü zurückzukehren drücken Sie bitte Enter""")
input()
os.system("cls")
def groß_entry():
os.system("cls")
Logfile.write("********** Logentry " + str(datetime.now().strftime("%d-%m-%Y %H-%M-%S")) + " **********\n")
for i in range(10,0,-1):
sys.stdout.write("Die Bereinigung startet in " + str(i)+' ' + "Sekunden\nUm die Bereinigung abzubrechen drücken Sie STRG+C")
time.sleep(1)
sys.stdout.flush()
os.system("cls")
os.system("taskkill /f /im javaw.exe")
os.system("taskkill /f /im perl.exe")
os.system("taskkill /f /im java.exe")
time.sleep(0.1)
if os.path.exists(path_cache):
try:
for root, dirs, files in os.walk(path_cache, topdown=True):
for name in files:
win32api.SetFileAttributes(os.path.join(root, name), win32con.FILE_ATTRIBUTE_NORMAL)
for filename in os.listdir(path_cache):
print(os.path.join(path_cache, filename) + " wird gelöscht")
time.sleep(1)
shutil.rmtree(os.path.join(path_cache, filename))
Logfile.write(os.path.join(path_cache, filename) + " wurde gelöscht\n")
except PermissionError as cache_error:
os.system("cls")
print("Es werden Administratorrechte benötigt\nBitte schauen Sie, für mehr Details, in das Logfile\n\nUm in das Menü zurück zu kehren bitte Enter drücken")
Logfile.write("*******ERROR*******\nDatei {0}: konnte nicht gelöscht werden\n{1}\n*******ERROR*******\n".format(str(os.path.join(path_cache, filename)), str(cache_error)))
print("Zum fortfahren bitte Enter drücken")
input()
try:
for filename in os.listdir(path_temp):
if filename.startswith('.abc'):
print(os.path.join(path_temp, filename) + " wird gelöscht")
os.remove(os.path.join(path_temp, filename))
Logfile.write(os.path.join(path_temp, filename) + " wurde gelöscht\n")
if filename.startswith('.xyz'):
print(os.path.join(path_temp, filename) + " wird gelöscht")
os.remove(os.path.join(path_temp, filename))
Logfile.write(os.path.join(path_temp, filename) + " wurde gelöscht\n")
if filename.startswith('xyz'):
print(os.path.join(path_temp, filename) + " wird gelöscht")
os.remove(os.path.join(path_temp, filename))
Logfile.write(os.path.join(path_temp, filename) + " wurde gelöscht\n")
for path in["C:\\Users\\" + benutzer + "",
"C:\\Users\\" + benutzer + "",
"C:\\Users\\" + benutzer + "",
"C:\\Users\\" + benutzer + "",
"C:\\Users\\" + benutzer + "",
"C:\\Users\\" + benutzer + "",
os.environ['K_PATH'] ,]:
if os.path.exists(path):
win32api.SetFileAttributes(path, win32con.FILE_ATTRIBUTE_NORMAL)
print(path + " wird entfernt")
time.sleep(0.5)
shutil.rmtree(path)
Logfile.write(path + " wurde entfernt" + "\n")
print("Der Rechner wird in kürze neu gestartet!!!!")
subprocess.call(["shutdown", "/r"])
Logfile.close()
os.system("cls")
except PermissionError as temp_file_error:
Logfile.write("*******ERROR*******\nDatei {0}: konnte nicht gelöscht werden\n{1}\n*******ERROR*******\n".format(str(path), str(temp_file_error)))
print("Es werden Administratorrechte benötigt\nBitte schauen Sie, für mehr Details, in das Logfile\n\nUm in das Menü zurück zu kehren bitte Enter drücken")
Logfile.close()
input()
os.system("cls")
def shutdown_cancel():
os.system("cls")
subprocess.call(["shutdown", "/a"])
os.system("cls")
print("Der Neustart wird abgebrochen")
print("Sie kehren zurück ins Menü")
time.sleep(1)
os.system("cls")
def quit_entry():
os.system("cls")
print("Programm wird beendet")
time.sleep(1)
sys.exit()
def handle_menu(menu):
while True:
try:
for index, item in enumerate(menu, 1):
print("{} {}".format(index, item[0]))
choice = int(input("Ihre Wahl? ")) - 1
if 0 <= choice < len(menu):
menu[choice][1]()
else:
print("Bitte nur Zahlen im Bereich 1 - {} eingeben".format(len(menu)))
time.sleep(1)
os.system('cls')
except ValueError:
print("Bitte keine Buchstaben sondern nur Zahlen im Bereich 1 - {} eingeben".format(len(menu)))
time.sleep(2)
os.system('cls')
menu = [
["Informationen", info],
["Bereinigung", groß_entry],
["NEUSTART abbrechen", shutdown_cancel],
["Programm beenden", quit_entry],
]
handle_menu(menu)