为什么这个关机单行命令不起作用

为什么这个关机单行命令不起作用

它在终端上运行良好,但从 python 中的线程调用时,它会失败。

history -d $((HISTCMD-1)) && echo 'password' | sudo -S shutdown -h 08:00

从 python 开始,这是我所做的:

halt = "history -d $((HISTCMD-1)) && echo 'password' | sudo -S shutdown -h 08:00"
thread.start_new_thread(lambda: commands.getoutput(halt),())

我尝试了 lambda 来执行其他命令,比如打开 nautilus 或 gedit,效果很好,但是关机命令不行!

答案1

这:

history -d $((HISTCMD-1)) && echo 'password' | sudo -S shutdown -h 08:00

实际上不是命令,而是 shell 脚本的一个片段。因此,您需要让 shell 执行它。如下所示:

import os
halt = "history -d $((HISTCMD-1)) && echo 'password' | sudo -S shutdown -h 08:00"
os.system(halt)

答案2

男人须藤

-S(stdin)选项使 sudo 从标准输入而不是终端设备读取密码。密码后面必须跟一个换行符。

因此,在 -S 之后,它会等待您在使用终端时提供的 NEWLINE 字符。

相关内容