Почему эта команда отключения одной строки не работает

Он отлично работает из терминала, но при вызове из потока в 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]

0
задан 13.04.2020, 15:10

2 ответа

Это:

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)
0
ответ дан 13.04.2020, 15:11

Из man sudo :

Опция -S (stdin) заставляет sudo читать пароль со стандартного входа вместо оконечного устройства. За паролем должен следовать символ новой строки.

Итак, после -S он ждет символа NEWLINE, который вы указали при использовании терминала.

0
ответ дан 13.04.2020, 15:11
  • 1
    Как сказанный OP, та команда хорошо работает от терминала и действительно, echo без -n, аргумент произведет запаздывающую новую строку. – Jon Abraham 13.04.2020, 15:11

Теги

Похожие вопросы