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

Он отлично работает из терминала, но при вызове из потока в 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
задан 3 October 2013 в 01:13

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
ответ дан 3 October 2013 в 01:13

Из man sudo :

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

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

0
ответ дан 3 October 2013 в 01:13

Другие вопросы по тегам:

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