Подтвердить что ты не робот

Python, как читать вывод из дочернего элемента pexpect?

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

Все, что я получаю с этим кодом в моем выпуске,

ls

ls 

Но когда мой код

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

Затем он работает, но только для первых двух отпечатков. Использую ли я неправильную команду отправки? Я попытался отправить, написать, отправить, и больше не мог найти.

4b9b3361

Ответ 1

В перспективе атрибуты before и after заполняются после expect метода. В этой ситуации чаще всего используется ожидание приглашения (поэтому вы будете знать, что предыдущая команда завершила выполнение). Итак, в вашем случае код может выглядеть примерно так:

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)

Ответ 2

Попробуйте следующее:

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

read() предоставит вам весь вывод ls.

Ответ 3

#!/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(".*\$ ")

Откройте файл журнала: перейти к терминалу

$gedit /tmp/mylog

Ответ 4

Я думаю, что все, что вам нужно, это:

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

или

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

или

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

или даже

print(pexpect.run('ls'))

Ответ 6

скопируйте из строки документации класса spawn (SpawnBase), возможно, пример-2 - это то, что вам нужно.

Пример журнала ввода и вывода в файл ::

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

Пример журнала в 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