¿Cómo hacer un script de python que pueda cerrar sesión, apagar y reiniciar una computadora?

Fondo

Actualmente estoy en el proceso de enseñarme Python, y pensé que sería un proyecto genial tener una especie de “centro de control” en el que podría apagar, reiniciar y desconectar mi computadora. También quiero usar el módulo de subproceso, ya que he oído que el módulo de importación del sistema operativo no está actualizado.

Código actual

def shutdown(self): import subprocess subprocess.call(["shutdown", "-f", "-s", "-t", "60"]) 

Pregunta

Lo que realmente estoy preguntando es: ¿hay alguna manera (usando el módulo de subproceso) para cerrar la sesión y reiniciar mi computadora?

Especificaciones técnicas

Python 2.7.3

Windows 7, 32 bit

Para reiniciar:

 shutdown /r 

Para cerrar sesión:

 shutdown /l 

El bloque de código final (según lo solicitado):

Desconectarse:

 def shutdown(self): import subprocess subprocess.call(["shutdown", "-f", "-s", "-t", "60"]) 

Reiniciar:

 def shutdown(self): import subprocess subprocess.call(["shutdown", "-f", "-r", "-t", "60"]) 

Primero tienes que:

 import subprocess 

Para apagar su PC con Windows:

 subprocess.call(["shutdown", "/s"]) 

Para reiniciar tu PC con Windows

 subprocess.call(["shutdown", "/r"]) 

Para cerrar sesión en su PC con Windows:

 subprocess.call(["shutdown", "/l "]) 

Para apagar su PC con Windows después de 900s:

 subprocess.call(["shutdown", "/r", "/s", "900"]) 

Para abortar el apagado porque no hay una buena razón para apagar su PC con una secuencia de comandos de python, simplemente estaba copiando y pegando código desde stackoverflow:

 subprocess.call(["shutdown", "/a "]) 

Solo probé estas llamadas de función en Python 3.5. En primer lugar, no creo que esto haya cambiado desde Python 2.7, y segundo: es 2016, así que supongo que ya has hecho el cambio desde que hiciste esta pregunta.

Si no puede hacer que el shutdown funcione de alguna manera, siempre puede simplemente llamar a la función que llama desde la biblioteca del USUARIO. Puedes hacerlo a través de ctypes o win32api , pero también puedes hacer esto:

 subprocess.call(['rundll32', 'user.exe,ExitWindowsExec') 

O puede llamar a la función de shell de nivel superior que utiliza el menú de inicio:

 subprocess.call(['rundll32', 'shell32.dll,SHExitWindowsEx 2') 

(Consulte la documentación de MSDN sobre estas funciones).

Creo que esta es probablemente la peor manera de hacerlo. Si desea ejecutar un comando, ejecute shutdown ; Si quieres usar la API, usa win32api . Pero si tiene un sistema extrañamente estropeado donde shutdown /r simplemente no funciona, es una opción.