它在终端上运行良好,但从 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 字符。