当前位置: 首页 > 面试题库 >

使用python关闭计算机(linux)

汪文光
2023-03-14
问题内容

我正在尝试编写一个脚本,如果命令满足一些要求,该脚本将关闭计算机

    os.system("poweroff")

也尝试过

    os.system("shutdown now -h")

和其他一些。但是当我运行它时,什么也没有发生,计算机浏览代码不会崩溃或产生任何错误消息,并且可以正常终止脚本,而无需关闭计算机。

如何用python关闭计算机?

编辑:

似乎我尝试过的命令需要root访问权限。有没有办法在没有提升特权的情况下从脚本关闭计算机?


问题答案:

那里的许多Linux发行版都需要超级用户特权才能执行shutdownhalt,但是,如果您坐在计算机上,可以在没有root用户的情况下关闭电源呢?您打开菜单,单击“
关机” ,然后关机,而您却没有成为root对吧?

好吧…这的 基本原理
是,如果您可以物理访问计算机,则可以将电源线拔出并以任何方式关闭电源,因此,如今,尽管可以访问本地系统总线,但许多发行版本仍可以关闭电源通过dbus。问题dbus(或者通过它暴露出来,而服务)?它在不断变化。我建议安装诸如D-feet之类的dbus查看器工具(建议:它仍然很难可视化,但是可能会有所帮助)

看一下这些Dbus关闭脚本。

如果您仍在使用HAL(即将淘汰),请尝试以下操作:

import dbus
sys_bus = dbus.SystemBus()
hal_srvc = sys_bus.get_object('org.freedesktop.Hal',
                              '/org/freedesktop/Hal/devices/computer')
pwr_mgmt =  dbus.Interface(hal_srvc,
                'org.freedesktop.Hal.Device.SystemPowerManagement')
shutdown_method = pwr_mgmt.get_dbus_method("Shutdown")
shutdown_method()

这可以在Ubuntu
12.04上使用(我刚刚关闭计算机电源以确保它可以正常工作)。如果您有较新的东西……很好,可能无法正常工作。这是此方法的缺点:它是非常特定于分发的。

您可能必须安装dbus-python软件包才能正常工作(http://dbus.freedesktop.org/doc/dbus-
python/doc/tutorial.html)

更新1:

我一直在做一些研究,看起来这是通过ConsoleKit在较新的Ubuntu版本中完成的。我已经在Ubuntu
12.04(已弃用的HAL和更新的ConsoleKit)中测试了以下代码,并且确实关闭了计算机:

>>> import dbus
>>> sys_bus = dbus.SystemBus()
>>> ck_srv = sys_bus.get_object('org.freedesktop.ConsoleKit',
                                '/org/freedesktop/ConsoleKit/Manager')
>>> ck_iface = dbus.Interface(ck_srv, 'org.freedesktop.ConsoleKit.Manager')
>>> stop_method = ck_iface.get_dbus_method("Stop")
>>> stop_method()

更新2:

也许您 为什么 可以不做这些就root应该做更广泛的解释。让我们专注于更新的ConsoleKitHAL恕我直言,方法更加复杂和混乱)。

ConsoleKit是一项root在您的系统中运行的服务:

borrajax@borrajax:/tmp$ ps aux|grep console-kit
root 1590  0.0  0.0 1043056 3876 ? Sl   Dec05   0:00 /usr/sbin/console-kit-daemon --no-daemon

现在,d-bus仅仅是一个消息传递系统。您有一项服务,例如 ConsoleKit
,它公开了的接口d-bus。公开的方法之一是Stop(如上所示)。 ConsoleKit 的权限由 PolKit
控制(尽管它基于常规的Linux权限)为 “谁可以做什么” 提供了更好的控制。例如, PolKit 可以说诸如
“如果用户登录到计算机,则允许他做某事。如果它是远程连接,则不要。” 。如果 PolKit 确定允许您的用户调用 ConsoleKit
Stop方法,该请求将通过(或 通过 )传递d-busConsoleKit
(随后它将关闭计算机,因为它可以…因为它值得…因为它root

进一步阅读:

  • 什么是ConsoleKit和PolicyKit?它们如何工作?
  • ArchWiki PolKit

总结:没有,您将无法关闭计算机root。但是您可以将正在运行的服务告诉您为root关闭系统。

奖金

我在您的意见一个阅读您想耗时的任务,以防止过热一段时间后关闭计算机......你知道吗,你可以 大概
其电源在给定时间使用RTC?(见本和本)很酷,嗯?(当我发现自己可以做到这一点时,我感到非常兴奋。):- D



 类似资料:
  • 问题内容: 我在linux机器上运行一个应用程序。通过提供Windows机器的IP地址作为输入,应用程序必须关闭Windows机器。如果机器运行相同的操作系统,这是非常容易的,但是我很困惑如何在跨OS中进行操作。 问题答案: 从Linux关闭Windows系统的命令-: 该命令可以从bash发出,甚至可以在cron作业中设置以在特定时间关闭计算机,并且默认情况下,此命令与许多发行版一起提供。

  • 问题内容: 我有一个Python脚本,该脚本定期循环运行,以对我的照明系统进行调整。当我关闭计算机时,我希望我的脚本能够检测到该问题,然后完全关闭灯。 如何检测我的计算机开始在Python中关闭? 或者,假设Windows向Python发送了“关闭时间”通知,我该如何拦截它以杀死我的灯并退出循环? 问题答案: 您应该对消息作出反应。 当用户注销或计算机关闭时,将发送此消息。 如果要应对睡眠/休眠以

  • 问题内容: 我正在尝试编写一个python脚本,该脚本可以使我的计算机关联到无线访问点(以字符串形式给出)。例如,我可能指定要连接到,而我的脚本将导致计算机执行此操作。 有人可以指出我正确的方向吗? 问题答案: 我决定接受Paulo的建议,并尝试使用Powershell /命令行。我找到了一篇有关通过命令行连接到网络的文章。 在命令行中,您可以执行以下操作: …该部分是可选的,并且仅在概要文件包含

  • 本文向大家介绍C#实现远程关闭计算机或重启计算机的方法,包括了C#实现远程关闭计算机或重启计算机的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现远程关闭计算机或重启计算机的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍php实现用手机关闭计算机(电脑)的方法,包括了php实现用手机关闭计算机(电脑)的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现用手机关闭计算机(电脑)的方法。分享给大家供大家参考。具体分析如下: 适合有手机和电脑,用wifi的php web开发。方便关闭你的电脑(尤其在你想睡觉时 ),适合局域网 用法:放在你的web项目文件夹,可以新建立个目录 对了,把你

  • 问题内容: 我需要为包含以下文本的文本文件计算Unigram,BiGrams和Trigrams: “囊性纤维化仅在美国就影响了30,000名儿童和年轻人。吸入盐水雾可以减少填充囊性纤维化患者气道的脓液和感染,尽管副作用包括令人讨厌的咳嗽症状和难闻的味道。这就是结论。发表在本周《新英格兰医学杂志》上的两项研究。 我从Python开始,并使用以下代码: http://www.daniweb.com/s