Modul in ein drittes importieren und 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
Koque
User
Beiträge: 5
Registriert: Samstag 9. Mai 2020, 11:36

Hey,
da mein jetziges Projekt für mehrere Befehle unter Windows 10 Adminrechte braucht, habe ich mir folgendes aus dem Internet rausgesucht, ein bisschen angepasst und in das Modul admin.py reingepackt :

Code: Alles auswählen

import ctypes, sys

class Admin():

	def is_admin():
   		 try:
       			 return ctypes.windll.shell32.IsUserAnAdmin()
    		except:
        		return False

	if is_admin():
    		# Code of your program here
    		Modul2.run()
	else:
    		# Re-run the program with admin rights
    		ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
 
Quelle: https://stackoverflow.com/questions/130 ... hon-script

Da ich dieses Modul nun gerne in meine Python Libary hinzufügen würde um dieses öfters einfach zu verwenden, müsste ich den im admin.py auszuführenden Code variabel machen, also mein Ansatz:
Ich rufe mit Modul1 das Modul admin auf und übergebe den Import und den Aufruf für Modul2 an das Modul admin, damit ich nicht jedes Mal das Modul admin anpassen muss.

Ist das möglich, bzw. Anregungen wie?

Ich hoffe ich habe mich korrekt ausgedrückt! :D

Vielen Dank im Vorraus!
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Einrückungen sind kaputt und die Klasse unsinnig.
Eine Funktion

Code: Alles auswählen

import ctypes, sys

def restart_as_admin():
    if not ctypes.windll.shell32.IsUserAnAdmin():
        result = ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)
        if result < 32:
            print(f"failed with code {result}")
        sys.exit()
aufgerufen am Anfang von main sollte genügen.
Koque
User
Beiträge: 5
Registriert: Samstag 9. Mai 2020, 11:36

Danke für deine Antwort! Es ist zwar nicht ganz was ich wollte, aber mit Anpassungen wird es seine Zwecke erfüllen. Anmerken möchte ich noch, ich weiß nicht ob du das auch schon so meinst, dass der als Admin auszuführende Code nach Zeile 5 (die mit result = ...) eingefügt werden muss.
Antworten