0


I'm trying to write script for gathering some information from network devices using Pexpect async expect(python 3.5.1 and pexpect from github) and get some strange thing: all works fine with several devices and doesn't work with some more (usually > 5-6). I wrote this simple script for testing:

@asyncio.coroutine def test_ssh_expect_async(num): print('Task #{0} start'.format(num)) p = pexpect.spawn('ssh localhost', encoding='utf8') #p.logfile = sys.stdout yield from p.expect('password', async=True) p.sendline('***') yield from p.expect(r'@self-VirtualBox\:', async=True) p.sendline('uptime') yield from p.expect(r'@self-VirtualBox\:', async=True) p.sendline('uname -a') yield from p.expect(r'@self-VirtualBox\:', async=True) p.sendline('ll') yield from p.expect(r'@self-VirtualBox\:', async=True) print('Task #{0} end'.format(num)) @asyncio.coroutine def test_loop(): tasks = [] for i in range(1, 5): tasks.append(test_ssh_expect_async(i)) yield from asyncio.wait(tasks) print('All Tasks done') print('--------------Async--------------------') loop = asyncio.get_event_loop() loop.run_until_complete(test_loop()) 

If i try to use range(1,3) as example i get this:

self@self-VirtualBox:/media/sf_netdev$ python3 simple-test.py --------------Async-------------------- Task #3 running Task #1 running Task #2 running Task #3 closed Task #1 closed Task #2 closed All Tasks done 

But if i increase upper limit i get some errors:

self@self-VirtualBox:/media/sf_netdev$ python3 simple-test.py --------------Async-------------------- Task #3 running Task #1 running Task #4 running Task #2 running Exception in callback BaseSelectorEventLoop.add_reader(11, <bound method...d=11 polling>>) handle: <Handle BaseSelectorEventLoop.add_reader(11, <bound method...d=11 polling>>)> Traceback (most recent call last): File "/usr/lib/python3.5/asyncio/selector_events.py", line 234, in add_reader key = self._selector.get_key(fd) File "/usr/lib/python3.5/selectors.py", line 191, in get_key raise KeyError("{!r} is not registered".format(fileobj)) from None KeyError: '11 is not registered' During handling of the above exception, another exception occurred: ... 

Why it happens? How to write working script with async pexpect?

---------------Answer------------

It was a bug https://github.com/pexpect/pexpect/issues/347. Now pexpect command fixed it.

1 Answer 1

1

It was a bug https://github.com/pexpect/pexpect/issues/347. Now pexpect command fixed it.

Sign up to request clarification or add additional context in comments.

1 Comment

Please edit the essential contents into this answer and then accept it as the answer to your question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.