pxssh - python pexpect ssh example
Python cómo leer la salida de pexpect child? (6)
child = pexpect.spawn (''/bin/bash'')
child.sendline(''ls'')
print(child.readline())
print child.before, child.after
Todo lo que obtengo con este código en mi salida es
ls
ls
Pero cuando mi código es
child = pexpect.spawn(''ls'')
print(child.readline())
print child.before, child.after
Entonces funciona, pero solo para las 2 primeras impresiones. ¿Estoy usando el comando de envío incorrecto? Intenté enviar, escribir, sendline, y no pude encontrar más.
Copie desde la clase documental spawnBase (SpawnBase), tal vez el ejemplo 2 es lo que quiere.
Ejemplo de registro de entrada y salida a un archivo:
child = pexpect.spawn(''some_command'')
fout = open(''mylog.txt'',''wb'')
child.logfile = fout
Ejemplo de log to 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
Creo que todo lo que necesitas es:
p = pexpect.spawn(''ls'')
p.expect(pexpect.EOF)
print(p.before)
o
p = pexpect.spawn(''/bin/ls'')
p.expect(pexpect.EOF)
print(p.before)
o
p = pexpect.spawn(''/bin/bash -c "ls"'')
p.expect(pexpect.EOF)
print(p.before)
o incluso
print(pexpect.run(''ls''))
En pexpect, los atributos de before
y after
se rellenan después de un método expect
. Lo más común que se usa en esta situación es esperar el aviso (para que sepa que el comando anterior terminó de ejecutarse). Entonces, en tu caso, el código podría verse algo como esto:
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)
Intenta lo siguiente:
import pexpect
child = pexpect.spawn(''ls'')
print child.read() # not readline
La read()
le dará la salida completa de los ls.
#!/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(".*/$ ")
Vaya a abrir su archivo de registro: - vaya a la terminal
$gedit /tmp/mylog
import sys
import pexpect
child = pexpect.spawn(''ls'')
child.logfile = sys.stdout
child.expect(pexpect.EOF)