Domanda

Sto scrivendo uno script python che esegue uno script csh in Solaris 10. Lo script csh richiede all'utente la password di root (che conosco) ma non sono sicuro di come rispondere allo script python al prompt con la password. È possibile? Ecco cosa sto usando per eseguire lo script csh:

import commands

commands.getoutput('server stop')
È stato utile?

Soluzione

Dai un'occhiata al modulo pexpect . È progettato per gestire programmi interattivi, che sembra essere il tuo caso.

Oh, e ricorda che la password di root con codifica rigida in uno script shell o python è potenzialmente una falla di sicurezza: D

Altri suggerimenti

Usa sottoprocesso . Chiama Popen () per creare il processo e usa communic () per inviarlo testo. Siamo spiacenti, ho dimenticato di includere il TUBO ..

from subprocess import Popen, PIPE

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

proc.communicate('password')

Faresti meglio a evitare la password e provare uno schema come sudo e sudoers. Pexpect, menzionato altrove, non fa parte della libreria standard.

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)

Ha fatto il trucco! Aspetta le regole!

Aggiungi input = in proc.communicate () per farlo funzionare, per i ragazzi a cui piace usare la lib standard.

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

Dovrebbe essere in grado di passarlo come parametro. qualcosa come:

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

Questo sembra funzionare meglio:

import popen2

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

stdin.write("password")

Ma non è ancora al 100%. Anche se " password " è la password corretta che sto ancora ricevendo su: mi spiace tornare dallo script csh quando sta cercando di fare il root su

Per evitare di dover rispondere alla domanda Password nello script Python, eseguirò lo script come root. Questa domanda è ancora senza risposta, ma suppongo che lo farò in questo modo per ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top