Pregunta

Estoy escribiendo una secuencia de comandos de Python que ejecuta una secuencia de comandos csh en Solaris 10. La secuencia de comandos de csh solicita al usuario la contraseña de root (que sé) pero no estoy seguro de cómo hacer que la secuencia de comandos de Python responda al mensaje con la contraseña. es posible? Esto es lo que estoy usando para ejecutar el script csh:

import commands

commands.getoutput('server stop')
¿Fue útil?

Solución

Eche un vistazo al módulo pexpect . Está diseñado para manejar programas interactivos, que parece ser su caso.

Ah, y recuerda que la contraseña de la raíz de codificación rígida en un shell o script de python es potencialmente un agujero de seguridad: D

Otros consejos

Use el subproceso . Llame a Popen () para crear su proceso y use comunicarse () para enviar texto. Lo sentimos, olvidé incluir el PIPE ..

from subprocess import Popen, PIPE

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

proc.communicate('password')

Lo mejor sería evitar la contraseña e intentar un esquema como sudo y sudoers. Pexpect, mencionado en otra parte, no forma parte de la biblioteca estándar.

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)

Hizo el truco! ¡Observe las reglas!

Agregue input = en proc.communicate () para que se ejecute, para los chicos que les gusta usar lib estándar.

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

Debería poder pasarlo como parámetro. algo como:

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

Esto parece funcionar mejor:

import popen2

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

stdin.write("password")

Pero no es 100% todavía. Aunque " contraseña " es la contraseña correcta que sigo obteniendo su: Lo siento por la secuencia de comandos csh cuando intenta su su rootear.

Para evitar tener que responder a la pregunta de contraseña en el script de python, solo voy a ejecutar el script como root. Esta pregunta sigue sin respuesta, pero supongo que lo haré de esta manera por ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top