Question

J'écris un script python qui exécute un script csh dans Solaris 10. Le script csh invite l'utilisateur à entrer le mot de passe root (que je connais), mais je ne sais pas comment faire en sorte que le script python réponde à l'invite avec le mot de passe. Est-ce possible? Voici ce que j'utilise pour exécuter le script csh:

import commands

commands.getoutput('server stop')
Était-ce utile?

La solution

Consultez le module pexpect . Il est conçu pour traiter les programmes interactifs, ce qui semble être votre cas.

Oh, et rappelez-vous que le mot de passe de la racine codée en dur dans un script shell ou python est potentiellement une faille de sécurité: D

Autres conseils

Utilisez le sous-processus . Appelez Popen () pour créer votre processus et utilisez communic () pour l’envoyer du texte. Désolé, j'ai oublié d'inclure le PIPE ..

from subprocess import Popen, PIPE

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

proc.communicate('password')

Évitez le mot de passe et essayez un système comme sudo et sudoers. Pexpect, mentionné par ailleurs, ne fait pas partie de la bibliothèque 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)

Fait le tour! Pexpect règne!

Ajoutez input = dans proc.communicate () pour le faire fonctionner, pour les gars souhaitant utiliser la bibliothèque standard.

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

Doit pouvoir le passer en paramètre. quelque chose comme:

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

Cela semble mieux fonctionner:

import popen2

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

stdin.write("password")

Mais ce n'est pas encore 100%. Même si " mot de passe " est le mot de passe correct que je reçois toujours su: désolé de revenir du script csh quand il essaie de faire su à la racine.

Pour éviter de devoir répondre à la question sur le mot de passe dans le script python, je vais simplement exécuter le script en tant que root. Cette question est toujours sans réponse mais je suppose que je vais le faire de cette façon pour l'instant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top