Hacer que Python ingrese la contraseña al ejecutar un script csh

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

import commands commands.getoutput('server stop') 

Echa un vistazo al módulo pexpect . Está diseñado para tratar con progtwigs interactivos, lo que parece ser su caso.

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

Utilizar subproceso . Llame a Popen () para crear su proceso y use comunicarse () para enviar texto. Lo sentimos, se olvidó de incluir el PIPE ..

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

Sería mejor 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() funcionar, para los individuos que les gusta usar la biblioteca 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. A pesar de que “password” es la contraseña correcta, sigo recibiendo su: Lo siento de nuevo desde el script csh cuando se intenta hacer un “su” a root.

Para evitar tener que responder 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.