summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Edwards <joeledwards@gmail.com>2013-12-10 05:46:47 -0700
committerJoel Edwards <joeledwards@gmail.com>2013-12-10 05:46:47 -0700
commit729733b5205479498a4992e056d9466a5aaa1835 (patch)
treed1c54b66c15e19c8b116651b71c4e4a6981cabc3
parent861947bab577ad9f5df84e19f02e8640c34716da (diff)
downloadpexpect-729733b5205479498a4992e056d9466a5aaa1835.tar.gz
__init__.py (pexpect)
- updated the read_nonblocking method to take a new boolean coerce_result argument pxssh.py - updated try_read_prompt to support python 2.x/3.x results from os.read (string/binary respectively)
-rw-r--r--pexpect/__init__.py10
-rw-r--r--pexpect/pxssh.py16
2 files changed, 19 insertions, 7 deletions
diff --git a/pexpect/__init__.py b/pexpect/__init__.py
index ed5e1e4..e248ad3 100644
--- a/pexpect/__init__.py
+++ b/pexpect/__init__.py
@@ -843,7 +843,7 @@ class spawn(object):
second_log.write(s)
second_log.flush()
- def read_nonblocking(self, size=1, timeout=-1):
+ def read_nonblocking(self, size=1, timeout=-1, coerce_result=True):
'''This reads at most size characters from the child application. It
includes a timeout. If the read does not complete within the timeout
period then a TIMEOUT exception is raised. If the end of file is read
@@ -914,8 +914,12 @@ class spawn(object):
self.flag_eof = True
raise EOF('End Of File (EOF). Empty string style platform.')
- s = self._coerce_read_string(s)
- self._log(s, 'read')
+ cs = self._coerce_read_string(s)
+ self._log(cs, 'read')
+
+ if coerce_result:
+ s = cs
+
return s
raise ExceptionPexpect('Reached an unexpected state.')
diff --git a/pexpect/pxssh.py b/pexpect/pxssh.py
index 65f2c57..e644a74 100644
--- a/pexpect/pxssh.py
+++ b/pexpect/pxssh.py
@@ -21,6 +21,7 @@ PEXPECT LICENSE
'''
from pexpect import ExceptionPexpect, TIMEOUT, EOF, spawn
+import struct
import time
import os
@@ -158,15 +159,18 @@ class pxssh (spawn):
# maximum time for reading the entire prompt
total_timeout = timeout_multiplier * 3.0
- prompt = ''
+ prompt = None
begin = time.time()
expired = 0.0
timeout = first_char_timeout
while expired < total_timeout:
try:
- c = self.read_nonblocking(size=1, timeout=timeout)
- prompt += c # append acquired content
+ c = self.read_nonblocking(size=1, timeout=timeout, coerce_result=False)
+ if prompt is None:
+ prompt = c
+ else:
+ prompt += c
expired = time.time() - begin # updated total time expired
timeout = inter_char_timeout
except TIMEOUT:
@@ -174,7 +178,11 @@ class pxssh (spawn):
# inter_char_timeout will drop us out of the loop quickly
expired = total_timeout
- return prompt
+ result = ''
+ if prompt is not None:
+ result = self._coerce_read_string(prompt)
+
+ return result
def sync_original_prompt (self, sync_multiplier=1.0):