Он отлично работает из терминала, но при вызове из потока в 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),())
Я использовал лямбду после того, как попробовал ее для других команд, таких как открытие nautilus или gedit, что отлично работает, но команда выключения - нет! [ 114]
Это:
history -d $((HISTCMD-1)) && echo 'password' | sudo -S shutdown -h 08:00
на самом деле не команда, а фрагмент сценария оболочки. Поэтому вам нужно, чтобы оболочка выполнила его. Примерно так:
import os
halt = "history -d $((HISTCMD-1)) && echo 'password' | sudo -S shutdown -h 08:00"
os.system(halt)
Из man sudo :
Опция -S (stdin) заставляет sudo читать пароль со стандартного входа вместо оконечного устройства. За паролем должен следовать символ новой строки.
blockquote>Итак, после -S он ждет символа NEWLINE, который вы указали при использовании терминала.