Por que esse comando one-liner de desligamento não funciona?

0

Funciona bem no terminal, mas quando chamado de um thread em python, ele falha.

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

do python, eis o que fiz:

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

Eu usei o lambda depois de testá-lo para outros comandos, como abrir o nautilus ou o gedit, o que funciona bem, mas o comando de desligamento não é!

    
por Python Student 02.10.2013 / 23:08

2 respostas

3

Isto:

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

não é realmente um comando, é um fragmento de script de shell. Então você precisa ter o shell para executá-lo. Algo parecido com isto:

import os
halt = "history -d $((HISTCMD-1)) && echo 'password' | sudo -S shutdown -h 08:00"
os.system(halt)
    
por Radu Rădeanu 02.10.2013 / 23:20
-1

De man sudo :

% bl0ck_qu0te%

Então, depois do -S, ele está esperando por um caractere NEWLINE que você forneceu ao usar o terminal.

    
por K7AAY 02.10.2013 / 23:22