Pergunta

Estou escrevendo um script python que executa um script CSH no Solaris 10. O script CSH solicita ao usuário a senha root (que eu conheço), mas não tenho certeza de como fazer o script Python responder o prompt com a senha. Isso é possível? Aqui está o que estou usando para executar o script CSH:

import commands

commands.getoutput('server stop')
Foi útil?

Solução

Dê uma olhada no pexpect módulo. Ele foi projetado para lidar com programas interativos, que parecem ser o seu caso.

Ah, e lembre-se de que a senha de codificação rígida em um script de shell ou python é potencialmente um buraco de segurança: D

Outras dicas

Usar subprocesso. Ligue para Popen () para criar seu processo e usar o Communicate () para enviar texto. Desculpe, esqueci de incluir o tubo ..

from subprocess import Popen, PIPE

proc = Popen(['server', 'stop'], stdin=PIPE)

proc.communicate('password')

Você faria melhor evitar a senha e tentar um esquema como sudo e sudoers. O Pexpect, mencionado em outro lugar, não faz parte da biblioteca padrão.

import pexpect
child = pexpect.spawn('server stop')
child.expect_exact('Password:')

child.sendline('password')

print "Stopping the servers..."

index = child.expect_exact(['Server processes successfully stopped.', 'Server is not running...'], 60)
child.expect(pexpect.EOF)

Fez o truque! Regras do Pexpect!

Adicionar input= dentro proc.communicate() Faça -o funcionar, para caras que gostam de usar a Lib padrão.

from subprocess import Popen, PIPE
proc = Popen(['server', 'stop'], stdin=PIPE)
proc.communicate(input='password')

Deve ser capaz de passar como um parâmetro. algo como:

commands.getoutput('server stop -p password')

Isso parece funcionar melhor:

import popen2

(stdout, stdin) = popen2.popen2('server stop')

stdin.write("password")

Mas ainda não está 100%. Mesmo que "senha" seja a senha correta, ainda estou recebendo SU: desculpe de volta do script CSH quando está tentando o SU Root.

Para evitar ter que responder à pergunta da senha no script python, vou executar o script como root. Esta pergunta ainda não foi respondida, mas acho que vou fazer dessa maneira por enquanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top