2011-08-10 6 views
3

J'automatise certaines tâches avec python, mais j'ai rencontré un peu de blocage. L'une des tâches que j'automatise nécessite une entrée de l'utilisateur dans le shell. L'exigence est que vous exécutiez la commande avec une adresse électronique en tant que paramètre (assez simple), puis vous êtes invité à vous authentifier avec le mot de passe pour cette adresse e-mail. Comment pouvez-vous simuler l'entrée de l'utilisateur pour fournir le mot de passe?Comment automatiser l'entrée shell avec python?

Il y a aussi quelques menus qui demandent des options, pour lesquelles l'entrée doit juste être frappée plusieurs fois. Comment est-ce simulé? En gardant à l'esprit que cette fenêtre n'aura pas toujours le focus ..

Répondre

1

On dirait que vous pensez d'une mauvaise façon. Vous avez juste besoin d'envoyer des octets via le canal au destinataire (script shell dans votre cas) et cela peut être fait avec subprocess.

3

Je ne suis pas sûr de ce que vous demandez dans la deuxième partie, mais les sous-processus peuvent être contrôlés avec le module pexpect. Par exemple:

#!/usr/bin/env python 

import pexpect 
import sys 

# Get email and password somehow 
#email = ... 
#password = ... 

# Start the subprocess 
child = pexpect.spawn('mycommand %s' % email) 
# redirect output to stdout 
child.logfile_read = sys.stdout 

# Assumes the prompt is "password:" 
child.expect('password:') 
child.sendline(password) 

# Wait for the process to close its output 
child.expect(pexpect.EOF) 
Questions connexes