2010-07-16 5 views
0

il y a un script qui attend l'entrée du clavier, je peux appeler ce script avec os.system (« ./ script ») en python,comment interagir avec un script externe (programme)

comment est-il possible renvoyer une entrée au script à partir d'un autre script appelant?

mise à jour:

le script est:

$ cat script 
#!/usr/bin/python 
for i in range(4): 
     name=raw_input('enter your name') 
     print 'Welcome %s :) ' % name 

lorsque je tente sans boucle, cela fonctionne, mais il montre la sortie que lorsque le script se ferme.

>>> p = subprocess.Popen('./script',stdin=subprocess.PIPE) 
>>> p.communicate('navras') 
enter your nameWelcome navras :) 

quand je l'essayer avec la boucle de Foor, il jette l'erreur, Comment afficher les déclarations interactif et lorsque le stdout est mis à jour avec de nouvelles déclarations d'impression

>>> p.communicate('megna') 
enter your nameWelcome megna :) 
enter your nameTraceback (most recent call last): 
    File "./script", line 3, in <module> 
    name=raw_input('enter your name') 
EOFError: EOF when reading a line 
(None, None) 

Répondre

1

Vous pouvez utiliser le sous-processus au lieu de os.system:

p = subprocess.Popen('./script',stdin=subprocess.PIPE) 
p.communicate('command') 

sa non Testet

+0

Ces références devraient donner plus de détails: http://docs.python.org/library/subprocess.html http://jimmyg.org/blog/2009/working-with-python-subprocess.html Dans l'exemple ci-dessus, vous voulez probablement ajouter l'argument 'stdout = subprocess.PIPE'. La fonction de communication doit retourner un tuple '(stdout, stderr)' avec les données envoyées à chacun de ces descripteurs. Vous pouvez aussi essayer 'p.stdin.write()' et 'p.stdout.readline()'. Vraiment, vous pouvez traiter 'p.stdin' et' p.stdout' comme vous le feriez pour n'importe quel autre objet fichier :) –

+0

quand je l'essaie avec la boucle foor, il jette une erreur, Comment afficher les instructions interactives au fur et à stdout est mis à jour avec de nouvelles instructions d'impression. >>> p.communicate ('Megna') entrez votre nameWelcome Megna :) entrez votre nameTraceback (appel le plus récent en dernier): Fichier "./script", ligne 3, en name = raw_input (» entrez votre nom ') EOFError: EOF lors de la lecture d'une ligne (Aucun, Aucun) –

-2

En fait, os.system et os.p open sont désormais obsolètes et le sous-processus est la méthode recommandée pour gérer toutes les interactions de sous-processus.

Questions connexes