我试图实现一个 python3 文件关闭计算机屏幕detailed here,命令:
xset-display:0.0 dpms force off
进入终端确实可以工作,它会关闭屏幕,甚至不需要其他命令将其重新打开,因为任何按键都会将其打开。
现在如何将其实现到 python 中,尤其是使用subprocess
,因为我听说os
模块使用起来不是很安全。
我试过了
import subprocess
subprocess.run(["xset","-display :0.0 dpms force off"])
但它不起作用,它给了我一个错误。请帮助,并告诉我像这样运行它是否安全,或者是否有另一个解决方案从 python 做到这一点。
首先:在以后的问题中,不要只是说“它不起作用,它给了我一个错误”。向我们确切地显示错误消息是什么。
我的猜测是,你开始这样的消息:
xset: unknown option -display :0.0 dpms force off
usage: xset [-display host:dpy] option ...
后跟一长串xset
将接受的选项。
这是因为您的subprocess.run
参数列表中的所有xset
命令参数都卡在列表中的单个项目中。
xset "-display :0.0 dpms force off"
其中引号将导致所有参数单词被分组为一个xset
不理解的单个大参数。如果您在终端中运行该命令,您应该从 Python 程序中获得完全相同的消息。
要修复它,而不是写这个:
subprocess.run(["xset", "-display :0.0 dpms force off"])
写这个:
subprocess.run(["xset", "-display", ":0.0", "dpms", "force", "off"])
这会导致xset
将每个参数视为一个单独的单词,并且它知道如何处理它们。
作为替代方法,您可以将单个字符串传递给subprocess.run
代替列表:
subprocess.run("xset -display :0.0 dpms force off")
但是正如subprocess
模块文档的Frequently Used Arguments部分所说,如果您的单个参数需要包含空格或其他需要特殊处理的字符,则使用字符串可能会变得丑陋。
像这样使用subprocess.run
是安全的。使用os.system
也是安全的(但效率较低),因为在这种情况下,您使用的命令和参数是固定的,并且完全由您的程序提供。os.system
的参数由其值来自程序外部的变量指定时变得危险。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(84条)