Damit kannst Du ja nur den User ermitteln, _während_ er gerade das Programm ausführt. Ich habe dich da wohl bisher falsch verstanden. Ich ging davon aus, das der User irgendwann Programm XYZ aufruft. Dieses Programm bestimmt dann, was später von einem Cronjob ausgeführt werden soll. Dieser Cronjob läuft aber als "root". Ich verstehe jetzt nicht, wie dieser Job per "os.path.split(os.path.expanduser('~'))[1]" den Namen des "eigentlichen" Users ermitteln will. Abgesehen davon, dass der Befehl in diesem Szenario ein IndexError liefert würde, wäre das Ergebnis sonst ja immer "root".
Ich hab das Gefühl mein gesamter Ansatz ist falsch. ☹
Ich starte aus dem Hauptscript eine andere Pythondatei als sudo welche dann ein Bashscript in die /etc/cron.weekly schreibt. Dieses Bashscript tut nichts anderes, als mit su user den User zu wechseln und eine andere Pythondatei auszuführen, welche sich dann um das Update kümmern soll.
Der User wird im Moment in der zweiten Pythondatei bestimmt, welche als sudo gestartet wird, deshalb funktioniert ein:
print getpass.getuser() print pwd.getpwuid(os.getuid())
nicht.
Bei mir gibt:
os.path.split(os.path.expanduser('~'))[-1]
auch den richtigen Namen zurück wenn ich den Code als sudo starte, aber diese Lösung ist nicht besonders sicher.
Das größte Problem liegt eigentlich darin, dass ich ein anderes Pythonscript als sudo starten muss, an das ich nicht ohne Probleme Variablen übergeben kann.