spyder icon indicating copy to clipboard operation
spyder copied to clipboard

sys.stdout redirection issues

Open RyanDion opened this issue 2 years ago • 1 comments

Description

What steps will reproduce the problem?

Create a tk window, put a textbox in it and a button that prints. Assign sys.stdout = somefunction that prints to the textbox try stepping through encounter error

Traceback

Exception in comms call get_cwd:
  File "D:\anaconda3\Lib\site-packages\spyder_kernels\comms\commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\anaconda3\Lib\site-packages\spyder_kernels\comms\frontendcomm.py", line 265, in _remote_callback
    saved_stdout_write = current_stdout.write
                         ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'function' object has no attribute 'write'
Exception in comms call get_cwd:
  File "D:\anaconda3\Lib\site-packages\spyder_kernels\comms\commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\anaconda3\Lib\site-packages\spyder_kernels\comms\frontendcomm.py", line 265, in _remote_callback
    saved_stdout_write = current_stdout.write
                         ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'function' object has no attribute 'write'
Exception in comms call get_cwd:
  File "D:\anaconda3\Lib\site-packages\spyder_kernels\comms\commbase.py", line 343, in _handle_remote_call
    return_value = self._remote_callback(
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\anaconda3\Lib\site-packages\spyder_kernels\comms\frontendcomm.py", line 265, in _remote_callback
    saved_stdout_write = current_stdout.write
                         ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'function' object has no attribute 'write'

Versions

  • Spyder version: 5.4.3 (conda)
  • Python version: 3.11.5 64-bit
  • Qt version: 5.15.2
  • PyQt5 version: 5.15.7
  • Operating System: Windows 10

Dependencies

# Mandatory:
atomicwrites >=1.2.0                             :  1.4.0 (OK)
chardet >=2.0.0                                  :  4.0.0 (OK)
cloudpickle >=0.5.0                              :  2.2.1 (OK)
cookiecutter >=1.6.0                             :  1.7.3 (OK)
diff_match_patch >=20181111                      :  20200713 (OK)
intervaltree >=3.0.2                             :  3.1.0 (OK)
IPython >=7.31.1,<9.0.0,!=8.8.0,!=8.9.0,!=8.10.0 :  8.15.0 (OK)
jedi >=0.17.2,<0.19.0                            :  0.18.1 (OK)
jellyfish >=0.7                                  :  1.0.1 (OK)
jsonschema >=3.2.0                               :  4.17.3 (OK)
keyring >=17.0.0                                 :  23.13.1 (OK)
nbconvert >=4.0                                  :  6.5.4 (OK)
numpydoc >=0.6.0                                 :  1.5.0 (OK)
paramiko >=2.4.0                                 :  2.8.1 (OK)
parso >=0.7.0,<0.9.0                             :  0.8.3 (OK)
pexpect >=4.4.0                                  :  4.8.0 (OK)
pickleshare >=0.4                                :  0.7.5 (OK)
psutil >=5.3                                     :  5.9.0 (OK)
pygments >=2.0                                   :  2.15.1 (OK)
pylint >=2.5.0,<3.0                              :  2.16.2 (OK)
pylint_venv >=2.1.1                              :  2.3.0 (OK)
pyls_spyder >=0.4.0                              :  0.4.0 (OK)
pylsp >=1.7.2,<1.8.0                             :  1.7.2 (OK)
pylsp_black >=1.2.0                              :  1.2.1 (OK)
qdarkstyle >=3.0.2,<3.2.0                        :  3.0.2 (OK)
qstylizer >=0.2.2                                :  0.2.2 (OK)
qtawesome >=1.2.1                                :  1.2.2 (OK)
qtconsole >=5.4.2,<5.5.0                         :  5.4.2 (OK)
qtpy >=2.1.0                                     :  2.2.0 (OK)
rtree >=0.9.7                                    :  1.0.1 (OK)
setuptools >=49.6.0                              :  68.0.0 (OK)
sphinx >=0.6.6                                   :  5.0.2 (OK)
spyder_kernels >=2.4.3,<2.5.0                    :  2.4.4 (OK)
textdistance >=4.2.0                             :  4.2.1 (OK)
three_merge >=0.1.1                              :  0.1.1 (OK)
watchdog >=0.10.3                                :  2.1.6 (OK)
zmq >=22.1.0                                     :  23.2.0 (OK)

# Optional:
cython >=0.21                                    :  None (NOK)
matplotlib >=3.0.0                               :  3.7.2 (OK)
numpy >=1.7                                      :  1.24.3 (OK)
pandas >=1.1.1                                   :  2.0.3 (OK)
scipy >=0.17.0                                   :  1.11.1 (OK)
sympy >=0.7.3                                    :  1.11.1 (OK)

RyanDion avatar Dec 19 '23 16:12 RyanDion

Hi @RyanDion., sorry for the late response and thank you for the feedback! I think the problem raises since Spyder uses sys.stdout when running from the IPython Console kernel (and your code reassing it then breaks things) 🤔

Maybe @ccordoba12 or @impact27 have some ideas about this? Maybe you have a more in depth explanation about the things that can and can't be done from code that interacts in some way with sys.stdout if run from the Spyder IPython Console?

dalthviz avatar Feb 14 '24 21:02 dalthviz