Bug 2155493 - python-pexpect fails to build with Python 3.12: RuntimeError: There is no current event loop in thread 'MainThread'.
Summary: python-pexpect fails to build with Python 3.12: RuntimeError: There is no cur...
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: python-pexpect
Version: 38
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Scott Talbert
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: PYTHON3.12
TreeView+ depends on / blocked
 
Reported: 2022-12-21 10:59 UTC by Tomáš Hrnčiar
Modified: 2023-02-13 03:13 UTC (History)
7 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2023-02-13 03:13:33 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Github pexpect pexpect issues 736 0 None open Compatibility with Python 3.12 - no current event loop, assertRaisesRegexp was removed 2023-02-01 08:35:19 UTC

Description Tomáš Hrnčiar 2022-12-21 10:59:09 UTC
python-pexpect fails to build with Python 3.12.0a3.

=================================== FAILURES ===================================
_________________________ AsyncTests.test_async_and_gc _________________________

self = <tests.test_async.AsyncTests testMethod=test_async_and_gc>

    def test_async_and_gc(self):
        p = pexpect.spawn('%s sleep_for.py 1' % self.PYTHONBIN, encoding='utf8')
>       assert run(p.expect_exact(u'READY', async_=True)) == 0

tests/test_async.py:63: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_async_and_gc 
________________________ AsyncTests.test_async_and_sync ________________________

self = <tests.test_async.AsyncTests testMethod=test_async_and_sync>

    def test_async_and_sync(self):
        p = pexpect.spawn('echo 1234', encoding='utf8', maxread=1)
>       assert run(p.expect_exact(u'1', async_=True)) == 0

tests/test_async.py:69: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_async_and_sync 
________________________ AsyncTests.test_async_replwrap ________________________

self = <tests.test_async.AsyncTests testMethod=test_async_replwrap>

    def test_async_replwrap(self):
        bash = replwrap.bash()
        coro = bash.run_command("time", async_=True)
>       res = run(coro)

tests/test_async.py:76: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_async_replwrap 
___________________ AsyncTests.test_async_replwrap_multiline ___________________

self = <tests.test_async.AsyncTests testMethod=test_async_replwrap_multiline>

    def test_async_replwrap_multiline(self):
        bash = replwrap.bash()
        coro = bash.run_command("echo '1 2\n3 4'", async_=True)
>       res = run(coro)

tests/test_async.py:82: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_async_replwrap_multiline 
__________________________ AsyncTests.test_async_utf8 __________________________

self = <tests.test_async.AsyncTests testMethod=test_async_utf8>

    def test_async_utf8(self):
        p = pexpect.spawn('%s list100.py' % self.PYTHONBIN, encoding='utf8')
>       assert run(p.expect_exact(u'5', async_=True)) == 0

tests/test_async.py:57: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_async_utf8 
_____________________________ AsyncTests.test_eof ______________________________

self = <tests.test_async.AsyncTests testMethod=test_eof>

    def test_eof(self):
        p = pexpect.spawn('cat')
        p.sendline('Hi')
        coro = p.expect(pexpect.EOF, async_=True)
        p.sendeof()
>       assert run(coro) == 0

tests/test_async.py:41: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_eof 
_________________________ AsyncTests.test_expect_exact _________________________

self = <tests.test_async.AsyncTests testMethod=test_expect_exact>

    def test_expect_exact(self):
        p = pexpect.spawn('%s list100.py' % self.PYTHONBIN)
>       assert run(p.expect_exact(b'5', async_=True)) == 0

tests/test_async.py:51: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_expect_exact 
________________________ AsyncTests.test_simple_expect _________________________

self = <tests.test_async.AsyncTests testMethod=test_simple_expect>

    def test_simple_expect(self):
        p = pexpect.spawn('cat')
        p.sendline('Hello asyncio')
        coro = p.expect(['Hello', pexpect.EOF] , async_=True)
>       assert run(coro) == 0

tests/test_async.py:23: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <asyncio.unix_events._UnixDefaultEventLoopPolicy object at 0x7f3b3c86f590>

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_simple_expect 
___________________________ AsyncTests.test_timeout ____________________________

self = <tests.test_async.AsyncTests testMethod=test_timeout>

    def test_timeout(self):
        p = pexpect.spawn('cat')
        coro = p.expect('foo', timeout=1, async_=True)
        with self.assertRaises(pexpect.TIMEOUT):
>           run(coro)

tests/test_async.py:30: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_async.py:15: in run
    return asyncio.get_event_loop().run_until_complete(coro)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    def get_event_loop(self):
        """Get the event loop for the current context.
    
        Returns an instance of EventLoop or raises an exception.
        """
        if self._local._loop is None:
>           raise RuntimeError('There is no current event loop in thread %r.'
                               % threading.current_thread().name)
E           RuntimeError: There is no current event loop in thread 'MainThread'.

/usr/lib64/python3.12/asyncio/events.py:676: RuntimeError
----------------------------- Captured stdout call -----------------------------

 tests.test_async.AsyncTests.test_timeout 
_________________________ ExpectTestCase.test_bad_arg __________________________

self = <tests.test_expect.ExpectTestCase testMethod=test_bad_arg>

    def test_bad_arg(self):
        p = pexpect.spawn('cat')
>       with self.assertRaisesRegexp(TypeError, '.*must be one of'):
E       AttributeError: 'ExpectTestCase' object has no attribute 'assertRaisesRegexp'. Did you mean: 'assertRaisesRegex'?

tests/test_expect.py:572: AttributeError
----------------------------- Captured stdout call -----------------------------

 tests.test_expect.ExpectTestCase.test_bad_arg 
_______________ TestCaseMisc.test_bad_arguments_suggest_fdpsawn ________________

self = <tests.test_misc.TestCaseMisc testMethod=test_bad_arguments_suggest_fdpsawn>

    def test_bad_arguments_suggest_fdpsawn(self):
        " assert custom exception for spawn(int). "
        expect_errmsg = "maybe you want to use fdpexpect.fdspawn"
>       with self.assertRaisesRegexp(pexpect.ExceptionPexpect,
                                     ".*" + expect_errmsg):
E                                    AttributeError: 'TestCaseMisc' object has no attribute 'assertRaisesRegexp'. Did you mean: 'assertRaisesRegex'?

tests/test_misc.py:227: AttributeError
----------------------------- Captured stdout call -----------------------------

 tests.test_misc.TestCaseMisc.test_bad_arguments_suggest_fdpsawn 
_______________________ TestCaseMisc.test_bad_child_pid ________________________

self = <tests.test_misc.TestCaseMisc testMethod=test_bad_child_pid>

    def test_bad_child_pid(self):
        " assert bad condition error in isalive(). "
        expect_errmsg = re.escape("isalive() encountered condition where ")
        child = pexpect.spawn('cat')
        child.terminate(force=1)
        # Force an invalid state to test isalive
        child.ptyproc.terminated = 0
        try:
>           with self.assertRaisesRegexp(pexpect.ExceptionPexpect,
                                         ".*" + expect_errmsg):
E                                        AttributeError: 'TestCaseMisc' object has no attribute 'assertRaisesRegexp'. Did you mean: 'assertRaisesRegex'?

tests/test_misc.py:217: AttributeError
----------------------------- Captured stdout call -----------------------------

 tests.test_misc.TestCaseMisc.test_bad_child_pid 
_________________________ ExpectTestCase.test_bad_arg __________________________

self = <tests.test_popen_spawn.ExpectTestCase testMethod=test_bad_arg>

    def test_bad_arg(self):
        p = PopenSpawn('cat')
>       with self.assertRaisesRegexp(TypeError, '.*must be one of'):
E       AttributeError: 'ExpectTestCase' object has no attribute 'assertRaisesRegexp'. Did you mean: 'assertRaisesRegex'?

tests/test_popen_spawn.py:113: AttributeError
----------------------------- Captured stdout call -----------------------------

 tests.test_popen_spawn.ExpectTestCase.test_bad_arg 
____________________ PxsshTestCase.test_connection_refused _____________________

self = <pexpect.pxssh.pxssh object at 0x7f3b3be4fce0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
>           s = os.read(self.child_fd, size)
E           OSError: [Errno 5] Input/output error

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:169: OSError

During handling of the above exception, another exception occurred:

self = <tests.test_pxssh.PxsshTestCase testMethod=test_connection_refused>

    def test_connection_refused(self):
        ssh = pxssh.pxssh()
        try:
>           ssh.login('noserver', 'me', password='s3cret')

/builddir/build/BUILD/pexpect-4.8.0/tests/test_pxssh.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:462: in login
    if not self.sync_original_prompt(sync_multiplier):
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:232: in sync_original_prompt
    self.try_read_prompt(sync_multiplier)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:207: in try_read_prompt
    prompt += self.read_nonblocking(size=1, timeout=timeout)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pty_spawn.py:460: in read_nonblocking
    incoming = super(spawn, self).read_nonblocking(size)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.pxssh.pxssh object at 0x7f3b3be4fce0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
            s = os.read(self.child_fd, size)
        except OSError as err:
            if err.args[0] == errno.EIO:
                # Linux-style EOF
                self.flag_eof = True
>               raise EOF('End Of File (EOF). Exception style platform.')
E               pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:174: EOF
----------------------------- Captured stdout call -----------------------------

 tests.test_pxssh.PxsshTestCase.test_connection_refused 
______________________ PxsshTestCase.test_custom_ssh_cmd _______________________

self = <pexpect.pxssh.pxssh object at 0x7f3b3be4d5b0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
>           s = os.read(self.child_fd, size)
E           OSError: [Errno 5] Input/output error

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:169: OSError

During handling of the above exception, another exception occurred:

self = <tests.test_pxssh.PxsshTestCase testMethod=test_custom_ssh_cmd>

    def test_custom_ssh_cmd(self):
        try:
            ssh = pxssh.pxssh()
            cipher_string = '-c aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,' \
                + 'aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,' \
                + 'aes256-cbc,arcfour'
>           result = ssh.login('server', 'me', password='s3cret', cmd='ssh ' + cipher_string + ' -2')

/builddir/build/BUILD/pexpect-4.8.0/tests/test_pxssh.py:245: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:462: in login
    if not self.sync_original_prompt(sync_multiplier):
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:232: in sync_original_prompt
    self.try_read_prompt(sync_multiplier)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:207: in try_read_prompt
    prompt += self.read_nonblocking(size=1, timeout=timeout)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pty_spawn.py:460: in read_nonblocking
    incoming = super(spawn, self).read_nonblocking(size)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.pxssh.pxssh object at 0x7f3b3be4d5b0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
            s = os.read(self.child_fd, size)
        except OSError as err:
            if err.args[0] == errno.EIO:
                # Linux-style EOF
                self.flag_eof = True
>               raise EOF('End Of File (EOF). Exception style platform.')
E               pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:174: EOF
----------------------------- Captured stdout call -----------------------------

 tests.test_pxssh.PxsshTestCase.test_custom_ssh_cmd 
___________________ PxsshTestCase.test_failed_custom_ssh_cmd ___________________

self = <pexpect.pxssh.pxssh object at 0x7f3b3bce6b10>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
>           s = os.read(self.child_fd, size)
E           OSError: [Errno 5] Input/output error

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:169: OSError

During handling of the above exception, another exception occurred:

self = <tests.test_pxssh.PxsshTestCase testMethod=test_failed_custom_ssh_cmd>

    def test_failed_custom_ssh_cmd(self):
        try:
            ssh = pxssh.pxssh()
            cipher_string = '-c invalid_cipher'
>           result = ssh.login('server', 'me', password='s3cret', cmd='ssh ' + cipher_string + ' -2')

/builddir/build/BUILD/pexpect-4.8.0/tests/test_pxssh.py:263: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:462: in login
    if not self.sync_original_prompt(sync_multiplier):
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:232: in sync_original_prompt
    self.try_read_prompt(sync_multiplier)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:207: in try_read_prompt
    prompt += self.read_nonblocking(size=1, timeout=timeout)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pty_spawn.py:460: in read_nonblocking
    incoming = super(spawn, self).read_nonblocking(size)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.pxssh.pxssh object at 0x7f3b3bce6b10>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
            s = os.read(self.child_fd, size)
        except OSError as err:
            if err.args[0] == errno.EIO:
                # Linux-style EOF
                self.flag_eof = True
>               raise EOF('End Of File (EOF). Exception style platform.')
E               pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:174: EOF
----------------------------- Captured stdout call -----------------------------

 tests.test_pxssh.PxsshTestCase.test_failed_custom_ssh_cmd 
_________________ PxsshTestCase.test_failed_set_unique_prompt __________________

self = <pexpect.pxssh.pxssh object at 0x7f3b3bcea9f0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
>           s = os.read(self.child_fd, size)
E           OSError: [Errno 5] Input/output error

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:169: OSError

During handling of the above exception, another exception occurred:

self = <tests.test_pxssh.PxsshTestCase testMethod=test_failed_set_unique_prompt>

    def test_failed_set_unique_prompt(self):
        ssh = pxssh.pxssh()
        ssh.set_unique_prompt = lambda: False
        try:
>           ssh.login('server', 'me', password='s3cret',
                      auto_prompt_reset=True)

/builddir/build/BUILD/pexpect-4.8.0/tests/test_pxssh.py:50: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:462: in login
    if not self.sync_original_prompt(sync_multiplier):
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:232: in sync_original_prompt
    self.try_read_prompt(sync_multiplier)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:207: in try_read_prompt
    prompt += self.read_nonblocking(size=1, timeout=timeout)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pty_spawn.py:460: in read_nonblocking
    incoming = super(spawn, self).read_nonblocking(size)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.pxssh.pxssh object at 0x7f3b3bcea9f0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
            s = os.read(self.child_fd, size)
        except OSError as err:
            if err.args[0] == errno.EIO:
                # Linux-style EOF
                self.flag_eof = True
>               raise EOF('End Of File (EOF). Exception style platform.')
E               pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:174: EOF
----------------------------- Captured stdout call -----------------------------

 tests.test_pxssh.PxsshTestCase.test_failed_set_unique_prompt 
_________________________ PxsshTestCase.test_fake_ssh __________________________

self = <pexpect.pxssh.pxssh object at 0x7f3b3a34aae0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
>           s = os.read(self.child_fd, size)
E           OSError: [Errno 5] Input/output error

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:169: OSError

During handling of the above exception, another exception occurred:

self = <tests.test_pxssh.PxsshTestCase testMethod=test_fake_ssh>

    def test_fake_ssh(self):
        ssh = pxssh.pxssh()
        #ssh.logfile_read = sys.stdout  # DEBUG
>       ssh.login('server', 'me', password='s3cret')

/builddir/build/BUILD/pexpect-4.8.0/tests/test_pxssh.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:462: in login
    if not self.sync_original_prompt(sync_multiplier):
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:232: in sync_original_prompt
    self.try_read_prompt(sync_multiplier)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:207: in try_read_prompt
    prompt += self.read_nonblocking(size=1, timeout=timeout)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pty_spawn.py:460: in read_nonblocking
    incoming = super(spawn, self).read_nonblocking(size)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.pxssh.pxssh object at 0x7f3b3a34aae0>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
            s = os.read(self.child_fd, size)
        except OSError as err:
            if err.args[0] == errno.EIO:
                # Linux-style EOF
                self.flag_eof = True
>               raise EOF('End Of File (EOF). Exception style platform.')
E               pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:174: EOF
----------------------------- Captured stdout call -----------------------------

 tests.test_pxssh.PxsshTestCase.test_fake_ssh 
_________________________ PxsshTestCase.test_wrong_pw __________________________

self = <pexpect.pxssh.pxssh object at 0x7f3b3bfb1730>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
>           s = os.read(self.child_fd, size)
E           OSError: [Errno 5] Input/output error

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:169: OSError

During handling of the above exception, another exception occurred:

self = <tests.test_pxssh.PxsshTestCase testMethod=test_wrong_pw>

    def test_wrong_pw(self):
        ssh = pxssh.pxssh()
        try:
>           ssh.login('server', 'me', password='wr0ng')

/builddir/build/BUILD/pexpect-4.8.0/tests/test_pxssh.py:40: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:462: in login
    if not self.sync_original_prompt(sync_multiplier):
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:232: in sync_original_prompt
    self.try_read_prompt(sync_multiplier)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pxssh.py:207: in try_read_prompt
    prompt += self.read_nonblocking(size=1, timeout=timeout)
/builddir/build/BUILD/pexpect-4.8.0/pexpect/pty_spawn.py:460: in read_nonblocking
    incoming = super(spawn, self).read_nonblocking(size)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.pxssh.pxssh object at 0x7f3b3bfb1730>, size = 1, timeout = None

    def read_nonblocking(self, size=1, timeout=None):
        """This reads data from the file descriptor.
    
        This is a simple implementation suitable for a regular file. Subclasses using ptys or pipes should override it.
    
        The timeout parameter is ignored.
        """
    
        try:
            s = os.read(self.child_fd, size)
        except OSError as err:
            if err.args[0] == errno.EIO:
                # Linux-style EOF
                self.flag_eof = True
>               raise EOF('End Of File (EOF). Exception style platform.')
E               pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.

/builddir/build/BUILD/pexpect-4.8.0/pexpect/spawnbase.py:174: EOF
----------------------------- Captured stdout call -----------------------------

asyncio.get_event_loop() and many other asyncio
functions like ensure_future(), shield() or gather(), and also the
get_event_loop() method of BaseDefaultEventLoopPolicy now raise a RuntimeError
if called when there is no running event loop and the current event loop was
not set. Previously they implicitly created and set a new current event loop.
DeprecationWarning is no longer emitted if there is no running event loop but
the current event loop is set in the policy. (Contributed by Serhiy Storchaka
in gh-93453.)

https://github.com/python/cpython/issues/93453

https://docs.python.org/3.12/whatsnew/3.12.html

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.12/fedora-rawhide-x86_64/05133688-python-pexpect/

For all our attempts to build python-pexpect with Python 3.12, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.12/package/python-pexpect/

Testing and mass rebuild of packages is happening in copr. You can follow these instructions to test locally in mock if your package builds with Python 3.12:
https://copr.fedorainfracloud.org/coprs/g/python/python3.12/

Let us know here if you have any questions.

Python 3.12 is planned to be included in Fedora 39. To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.12.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires), so if this package is required a lot, it's important for us to get it fixed soon.
We'd appreciate help from the people who know this package best, but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Scott Talbert 2023-02-03 03:14:44 UTC
Thanks for filing that issue.  Unfortunately, upstream is somewhat dead for this package.  I've fixed some of the issues, but the event loop stuff was removed prematurely and I believe it will be back in the next Python 3.12 alpha (which is supposed to be out on Monday?).  I'll check again then.

Comment 2 Ben Cotton 2023-02-07 15:11:50 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 38 development cycle.
Changing version to 38.

Comment 3 Scott Talbert 2023-02-13 03:13:33 UTC
This should be fixed now in Rawhide along with alpha 5.


Note You need to log in before you can comment on or make changes to this bug.