How to make a python script which can logoff, shutdown, and restart a computer?

First you have to:

import subprocess

To shutdown your Windows PC:

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

To restart your windows PC

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

To logout your Windows PC:

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

To shutdown your Windows PC after 900s:

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

To abort shutting down because there is no good reason to shutdown your pc with a python script, you were just copy-pasting code from stackoverflow:

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

I only tried these function calls in Python 3.5. First of all, I do not think this has changed since python 2.7, and second: it is 2016, so I guess you have made the switch already since asking this question.


To restart:

shutdown /r

To log off:

shutdown /l

The final code block (as requested):

Log off:

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

Restart:

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

If you can't get shutdown to work somehow, you can always just call the function it calls out of the USER library. You could do this via ctypes or win32api, but you can also just do this:

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

Or you could call the higher-level shell function that the start menu uses:

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

(See MSDN documentation on these functions.)

I think this is probably the worst way to do it. If you want to run a command, run shutdown; if you want to use the API, use win32api. But if you've got a bizarrely screwed-up system where shutdown /r just doesn't work, it's an option.