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.
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)
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.
#!/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
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'))
import sys
import pexpect
child = pexpect.spawn('ls')
child.logfile = sys.stdout
child.expect(pexpect.EOF)
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
来源:https://stackoverflow.com/questions/17632010/python-how-to-read-output-from-pexpect-child