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
Затем он работает, но только для первых двух отпечатков. Использую ли я неправильную команду отправки? Я попытался отправить, написать, отправить, и больше не мог найти.
Ответы
Ответ 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'))
Ответ 5
import sys
import pexpect
child = pexpect.spawn('ls')
child.logfile = sys.stdout
child.expect(pexpect.EOF)
См. ввод руководства по объекту.
Ответ 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