2013-10-03 4 views
0

J'ai une commande (Say foo) que je dirige normalement du terminal comme ceci:entrée à traiter en utilisant Python

[email protected]$ foo 
    enter the string: *(here I enter some string)* 
    RESULT OF THE COMMAND WITH THE GIVEN INPUT 

Je sais d'avance ce que l'entrée que je dois donner. Alors, comment puis-je automatiser l'appel à l'aide de ce code python:

from subprocess import call 
    call(['foo']) 

Comment automatiser l'entrée foo?

+0

'appel ([entrée ('Entrez la chaîne')]) 'dans Python 3.x, ou' call ([raw_input()]) 'pour Python 2.x – karthikr

+0

cela n'a aucune référence à foo. Comment je l'appelle? – tdk

+0

@ user1928721 N'utilisez pas la méthode dans le commentaire ci-dessus. Ce n'est pas ce que tu veux. – SethMMorton

Répondre

0

Utilisez Popen et communicate:

from subprocess import Popen, PIPE 

process = Popen('foo', stdout=PIPE, stderr=PIPE) 

(stdout, stderr) = process.communicate("YOUR INPUT HERE") 

print stdout 
+0

Cela ne semble pas fonctionner. Je reçois toujours l'invite, et maintenant le reste du code, c'est-à-dire RÉSULTAT DE LA COMMANDE AVEC L'ENTRÉE DONNÉE ne semble pas fonctionner – tdk

+0

@ user1928721 "Ne semble pas fonctionner" * S'il vous plaît * être plus précis. C'est comme aller chez le médecin et dire «je me blesse» et m'attendre à ce qu'ils vous diagnostiquent. Indiquez exactement ce qui ne fonctionne pas. Quel résultat voyez-vous? Quel comportement obtenez-vous? Qu'attendez-vous? – SethMMorton

+0

Mes excuses les plus sincères. Je suis nouveau dans le monde de la programmation python et linux. Je reçois une invite d'invite (c'est-à-dire "entrer la chaîne:") qui est présente pendant plus d'une minute, donc je suppose que l'entrée automatique n'a pas eu lieu et que je saisis manuellement l'entrée. Le reste du code ne semble pas fonctionner du tout (c'est-à-dire que le curseur reste là pendant 10 minutes, et je tue le processus car il me donne généralement le résultat ("RÉSULTAT DE LA COMMANDE AVEC L'ENTRÉE DONNÉE") en quelques secondes – tdk

1

Vous pouvez consulter le tiers Module pexpect (Here is the API):

import pexpect 
child = pexpect.spawn('foo') 
child.expect('enter the string:') 
child.sendline('STRING YOU KNOW TO ENTER') 
child.close() # End Communication 
Questions connexes