diff options
| author | Thomas Kluyver <takowl@gmail.com> | 2017-02-07 12:28:57 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-07 12:28:57 +0000 |
| commit | cde69e47d46a6f444920b5010e4e7fb3c01f63fc (patch) | |
| tree | 1ee6785869f944bd1036a5868b229f3d6b79a500 /pexpect | |
| parent | cb440d20f9dd3488f61d5af8b2f7e8a8bad2c7dd (diff) | |
| parent | e35cc4b7711a9b5ab556f90707d21922257cc5cc (diff) | |
| download | pexpect-cde69e47d46a6f444920b5010e4e7fb3c01f63fc.tar.gz | |
Merge pull request #376 from gescheit/master
dont remove reference to _UnixReadPipeTransport
Diffstat (limited to 'pexpect')
| -rw-r--r-- | pexpect/async.py | 20 | ||||
| -rw-r--r-- | pexpect/spawnbase.py | 2 |
2 files changed, 16 insertions, 6 deletions
diff --git a/pexpect/async.py b/pexpect/async.py index 136fc0e..3a1a1ad 100644 --- a/pexpect/async.py +++ b/pexpect/async.py @@ -12,22 +12,30 @@ def expect_async(expecter, timeout=None): idx = expecter.new_data(previously_read) if idx is not None: return idx - - transport, pw = yield from asyncio.get_event_loop()\ - .connect_read_pipe(lambda: PatternWaiter(expecter), expecter.spawn) - + if not expecter.spawn.async_pw_transport: + pw = PatternWaiter() + pw.set_expecter(expecter) + transport, pw = yield from asyncio.get_event_loop()\ + .connect_read_pipe(lambda: pw, expecter.spawn) + expecter.spawn.async_pw_transport = pw, transport + else: + pw, transport = expecter.spawn.async_pw_transport + pw.set_expecter(expecter) + transport.resume_reading() try: return (yield from asyncio.wait_for(pw.fut, timeout)) except asyncio.TimeoutError as e: transport.pause_reading() return expecter.timeout(e) + class PatternWaiter(asyncio.Protocol): transport = None - def __init__(self, expecter): + + def set_expecter(self, expecter): self.expecter = expecter self.fut = asyncio.Future() - + def found(self, result): if not self.fut.done(): self.fut.set_result(result) diff --git a/pexpect/spawnbase.py b/pexpect/spawnbase.py index 5dd24b5..cb64582 100644 --- a/pexpect/spawnbase.py +++ b/pexpect/spawnbase.py @@ -115,6 +115,8 @@ class SpawnBase(object): self.linesep = os.linesep.decode('ascii') # This can handle unicode in both Python 2 and 3 self.write_to_stdout = sys.stdout.write + # storage for async transport + self.async_pw_transport = None def _log(self, s, direction): if self.logfile is not None: |
