【问题标题】:How to make a python script which can logoff, shutdown, and restart a computer?如何制作一个可以注销、关闭和重新启动计算机的python脚本?
【发布时间】:2013-01-23 17:17:30
【问题描述】:

背景

我目前正在自学python,我认为拥有一个可以关闭、重新启动和注销计算机的“控制中心”将是一个非常酷的项目。我也想使用 subprocess 模块,因为我听说 import OS 模块已经过时了。

当前代码

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

问题

我真正要问的是,有没有办法(使用 subprocess 模块)注销并重新启动我的计算机?

技术规格

Python 2.7.3

Windows 7,32 位

【问题讨论】:

  • -r 也许要重启?
  • 感谢您的建议,但我试过了,问题是 - 计算机找不到文件“重新启动”,选项(-f、-s、-t)并不重要尊重。
  • 我觉得开关应该是/f/s
  • 为什么一定要用斜线而不是减号?到目前为止它运行良好 - 它是否违反了良好的编码实践?最后,你说的开关是什么意思?感谢您的所有帮助!
  • @xxmbabanexx:如果我没记错的话,Windows 使用/f 而不是-f(仅作为示例)。我可能错了。

标签: python windows subprocess


【解决方案1】:

首先你必须:

import subprocess

要关闭您的 Windows PC:

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

重新启动 Windows 电脑

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

要注销您的 Windows PC:

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

在 900 秒后关闭您的 Windows PC:

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

要中止关闭,因为没有充分的理由使用 python 脚本关闭你的电脑,你只是从 stackoverflow 复制粘贴代码:

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

我只在 Python 3.5 中尝试过这些函数调用。首先,我认为自 python 2.7 以来这没有改变,其次:它是 2016 年,所以我猜你在问这个问题后已经做出了切换。

【讨论】:

  • 900s关机延时调用错误。 /t 标志用于调整超时,而不是 /s。此外,我认为您打算将/s 用于上述关机。我不希望将/r/s 结合起来会发生什么好事。
【解决方案2】:

重启:

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"])

【讨论】:

  • 如何强制注销?。如果操作系统要求您先保存文件怎么办?然后你就卡住了。有没有办法做到这一点?
【解决方案3】:

如果你不能让shutdown 以某种方式工作,你总是可以从 USER 库中调用它调用的函数。您可以通过ctypeswin32api 执行此操作,但您也可以这样做:

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

或者您可以调用开始菜单使用的更高级别的 shell 函数:

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

(有关这些功能,请参阅 MSDN 文档。)

我认为这可能是最糟糕的方法。如果要运行命令,请运行shutdown;如果要使用 API,请使用 win32api。但是,如果您的系统异常混乱,shutdown /r 无法正常工作,那么这是一个选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多