Reputation: 2013
I am trying to read the output of pexpect.send(cmd) but here's the problem I am facing.
I am sending many commands in a sequence and I want to read/expect after a certain set of commands. Condition is that only the output of last command is to be considered. But expect
matches from the point it last read. I have tried different methods such as matching for an EOF before sending the command of which I need the output but EOF means that child has terminated. I have tried reading till timeout and then sending the command but timeout itself causes the child to terminate.
I have looked for ways in which I could read from the end or the last line of output. I am considering reading a fixed bytes to a file or string and then manipulate the output to get the info I want. Here as well the fixed number of bytes is not fixed. There does not seems to be a reliable way to do this.
Could anyone help me sort this out ?
Upvotes: 1
Views: 977
Reputation: 2013
There are three ways in which this problem can be handled but none to flush the buffer
send
call should be matched with a call to
expect
. This ensures that the file pointer has moved ahead of the
previous send.send
before a single expect
then we need
to provide a way to move file pointer to the location of last send.
This can be done by an extra send
whose expect
output is unique.
The uniqueness should be such that none of the send
in the series
of send
should give that output.logfile_read
to a file. All the output
will be logged to this file. Before the send
for which the
expect
is used, get the position of file pointer. Now get the
position of file pointer after the send as well. Search for expected
pattern in the file in between first and second pointer.First method is the ideal way it should be done.
Upvotes: 0