it-swarm.com.de

So fahren Sie einen Computer mit Python herunter

Ich habe ein Python-Skript geschrieben, das den Computer letztendlich herunterfahren sollte. 

Diese Zeile ist ein Teil davon:

os.system("shutdown /p")

Es wird auf irgendeine Weise heruntergefahren, bleibt aber auf dem Windows-Kontrollfeld (in dem der Benutzer die Computerbenutzer wechseln kann) eingeschaltet. 

Gibt es eine Möglichkeit, den Computer vollständig herunterzufahren? 

Ich habe andere os.system("shutdown ___")-Methoden ohne Erfolg ausprobiert.

Gibt es eine andere Methode, die helfen könnte?

12
Ben L
import os
os.system('shutdown -s')

Das wird für Sie funktionieren.

12
dudu1791

Für Linux:

import os
os.system('Sudo shutdown now')

oder: Wenn Sie sofort ohne Sudo nach Kennwort fragen möchten, geben Sie Folgendes für Ubuntu und ähnliche Distributionen ein:

os.system('systemctl poweroff') 
6
Mtl Dev

Mit ctypes können Sie den Computer mit der ExitWindowsEx - Funktion herunterfahren. 

Beschreibung von MSDN:

Meldet den interaktiven Benutzer ab, fährt das System herunter oder fährt das System herunter und startet es neu.


Zuerst ein Code:

import ctypes

user32 = ctypes.WinDLL('user32')

user32.ExitWindowsEx(0x00000008, 0x00000000)

Nun die Erklärung Zeile für Zeile:

  • Holen Sie sich die ctypes-Bibliothek
  • Die ExitWindowsEx wird vom user32.dll bereitgestellt und muss über WinDLL() geladen werden.
  • Rufen Sie die Funktion ExitWindowsEx() auf und übergeben Sie die erforderlichen Parameter.

Parameter:

Alle Argumente sind Hexadezimalzahlen. 

Das erste Argument, das ich ausgewählt habe:

fährt das System herunter und schaltet die Stromversorgung aus. Das System muss die Ausschaltfunktion unterstützen.

Es gibt viele andere mögliche Funktionen in die Dokumentation für eine vollständige Liste.

Das zweite Argument:

Das zweite Argument must gibt einen Grund für das Herunterfahren an, das vom System protokolliert wird. In diesem Fall setze ich es für Other issue, aber es gibt viele zur Auswahl. Siehe this für eine vollständige Liste. 

Plattformübergreifend machen:

Dies kann mit anderen Methoden kombiniert werden, um es plattformübergreifend zu machen. Zum Beispiel:

import sys

if sys.platform == 'win32':

    import ctypes
    user32 = ctypes.WinDLL('user32')
    user32.ExitWindowsEx(0x00000008, 0x00000000)

else:

    import os
    os.system('Sudo shutdown now')

Dies ist eine Windows-abhängige Funktion (Linux/Mac wird zwar ein Äquivalent haben), ist jedoch eine bessere Lösung als der Aufruf von os.system(), da ein Batch-Skript namens shutdown.bat nicht mit dem Befehl in Konflikt steht (und in der Zwischenzeit ein Sicherheitsrisiko darstellt). .

Außerdem stört es Benutzer nicht mit einer Meldung, die "You are about to be signed out in less than a minute" wie shutdown -s sagt, sondern wird im Hintergrund ausgeführt.

Als Randnotiz verwenden Sie subprocess over os.system() (siehe Unterschied zwischen subprozess.Popen und os.system )


Als Randbemerkung: Ich habe WinUtils (nur Windows) gebaut, was dies etwas vereinfacht, es sollte jedoch schneller sein (und erfordert keine Ctypes), da es in C eingebaut ist.

Beispiel:

import WinUtils
WinUtils.Shutdown(WinUtils.SHTDN_REASON_MINOR_OTHER)
1
Simon

Die einzige Variante, die für mich ohne Probleme funktioniert, ist:

import os
os.system('shutdown /p /f')
0
Vladimir

Dieser Python Code kann die Tat vollbringen:

import os
os.system('Sudo shutdown -h now')
0
D. Robusto