Python how to read output from pexpect child?

2019-01-23 03:49发布

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

All I get with this code in my output is

ls

ls 

But when my code is

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

Then it works, but only for the first 2 prints. Am I using the wrong send command? I tried send, write, sendline, and couldn't find anymore.

6条回答
不美不萌又怎样
2楼-- · 2019-01-23 04:25

I think all you need is:

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

or

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

or

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

or even

print(pexpect.run('ls'))
查看更多
爷的心禁止访问
3楼-- · 2019-01-23 04:27
#!/usr/bin/env python

import pexpect
child = pexpect.spawn("ssh root@172.16.0.120c -p 2222")
child.logfile = open("/tmp/mylog", "w")
child.expect(".*assword:")
child.send("XXXXXXX\r")
child.expect(".*\$ ")
child.sendline("ls\r")
child.expect(".*\$ ")

go to open your logfile:- go to terminal

$gedit /tmp/mylog
查看更多
虎瘦雄心在
4楼-- · 2019-01-23 04:28

Try the following:

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

The read() will give you the entire output of the ls.

查看更多
Root(大扎)
5楼-- · 2019-01-23 04:30

copy from class spawn(SpawnBase) docstring, maybe example-2 is what you want.

Example log input and output to a file::

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

Example 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
查看更多
狗以群分
6楼-- · 2019-01-23 04:35

In pexpect the before and after attributes are populated after an expect method. The most common thing used in this situation is waiting for the prompt (so you'll know that the previous command finished execution). So, in your case, the code might look something like this:

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)
查看更多
地球回转人心会变
7楼-- · 2019-01-23 04:51
import sys
import pexpect
child = pexpect.spawn('ls')
child.logfile = sys.stdout
child.expect(pexpect.EOF)

See the manual entry on the subject.

查看更多
登录 后发表回答