背景
我目前正在自学python的过程中,我认为拥有一种“控制中心”是一个非常酷的项目,我可以在其中关闭,重新启动和注销我的计算机。我也想使用子进程模块,因为我听说导入OS模块已经过时了。
当前代码
def shutdown(self):
import subprocess
subprocess.call(["shutdown", "-f", "-s", "-t", "60"])
问题
我真正要问的是,有没有办法(使用子进程模块)注销并重新启动计算机?
技术规格
Python 2.7.3
Windows 7,32位
答案 0 :(得分:10)
首先你必须:
import subprocess
关闭Windows PC:
subprocess.call(["shutdown", "/s"])
重新启动Windows PC
subprocess.call(["shutdown", "/r"])
注销Windows PC:
subprocess.call(["shutdown", "/l "])
在900秒后关闭Windows PC:
subprocess.call(["shutdown", "/r", "/s", "900"])
要中止关闭,因为没有充分的理由用python脚本关闭你的电脑,你只是从stackoverflow复制粘贴代码:
subprocess.call(["shutdown", "/a "])
我只在Python 3.5中尝试过这些函数调用。首先,我不认为自python 2.7以来这已经发生了变化,第二种:它是2016年,所以我猜你自问这个问题后就已经做了转换。
答案 1 :(得分:7)
要重新启动:
shutdown /r
注销:
shutdown /l
最终代码块(根据要求):
注销:
def shutdown(self):
import subprocess
subprocess.call(["shutdown", "-f", "-s", "-t", "60"])
重新启动:
def shutdown(self):
import subprocess
subprocess.call(["shutdown", "-f", "-r", "-t", "60"])
答案 2 :(得分:2)
如果你不能以某种方式让shutdown
工作,你总是可以调用它从USER库调出的函数。您可以通过ctypes
或win32api
执行此操作,但您也可以这样做:
subprocess.call(['rundll32', 'user.exe,ExitWindowsExec')
或者您可以调用开始菜单使用的更高级shell函数:
subprocess.call(['rundll32', 'shell32.dll,SHExitWindowsEx 2')
(有关这些功能,请参阅MSDN文档。)
我认为这可能是最糟糕的做法。如果要运行命令,请运行shutdown
;如果您想使用API,请使用win32api
。但如果你有一个奇怪的搞砸系统,shutdown /r
只是不起作用,那就是一个选择。