web-dev-qa-db-fra.com

Python comment lire la sortie d'un enfant pexpect?

child = pexpect.spawn ('/bin/bash')
child.sendline('ls')
print(child.readline())
print child.before, child.after

Tout ce que je reçois avec ce code dans ma sortie est

ls

ls 

Mais quand mon code est

child = pexpect.spawn('ls')
print(child.readline())
print child.before, child.after

Ensuite, cela fonctionne, mais uniquement pour les 2 premières impressions. Suis-je en train d'utiliser la mauvaise commande d'envoi? J'ai essayé d'envoyer, d'écrire, d'envoyer des lignes et je n'ai plus pu trouver.

21
user2579116

Dans pexpect, les attributs before et after sont remplis après une méthode expect. La chose la plus couramment utilisée dans cette situation est d'attendre l'invite (vous saurez donc que la commande précédente a terminé l'exécution). Donc, dans votre cas, le code pourrait ressembler à ceci:

child = pexpect.spawn ('/bin/bash')
child.expect("Your bash Prompt here")
child.sendline('ls')
#If you are using pxssh you can use this
#child.Prompt()
child.expect("Your bash Prompt here")
print(child.before)
17
Catalin Luta

Essayez ce qui suit:

import pexpect
child = pexpect.spawn('ls')
print child.read() # not readline

La read() vous donnera la sortie entière du ls.

11
mvensky
#!/usr/bin/env python

import pexpect
child = pexpect.spawn("ssh [email protected] -p 2222")
child.logfile = open("/tmp/mylog", "w")
child.expect(".*assword:")
child.send("XXXXXXX\r")
child.expect(".*\$ ")
child.sendline("ls\r")
child.expect(".*\$ ")

allez ouvrir votre fichier journal: - allez au terminal

$gedit /tmp/mylog
9
Reegan Miranda
import sys
import pexpect
child = pexpect.spawn('ls')
child.logfile = sys.stdout
child.expect(pexpect.EOF)

Voir l'entrée manuelle sur le sujet.

3
djhaskin987

Je pense que tout ce dont vous avez besoin est:

p = pexpect.spawn('ls')
p.expect(pexpect.EOF)
print(p.before)

ou

p = pexpect.spawn('/bin/ls')
p.expect(pexpect.EOF)
print(p.before)

ou

p = pexpect.spawn('/bin/bash -c "ls"')
p.expect(pexpect.EOF)
print(p.before)

ou même

print(pexpect.run('ls'))
3
Stanislav

copier à partir de la classe docstring spawn (SpawnBase), peut-être que l'exemple-2 est ce que vous voulez.

Exemple d'entrée et de sortie de journal dans un fichier ::

child = pexpect.spawn('some_command')
fout = open('mylog.txt','wb')
child.logfile = fout

Exemple de journal sur stdout ::

# In Python 2:
child = pexpect.spawn('some_command')
child.logfile = sys.stdout

# In Python 3, we'll use the ``encoding`` argument to decode data
# from the subprocess and handle it as unicode:
child = pexpect.spawn('some_command', encoding='utf-8')
child.logfile = sys.stdout
1
yongxu