New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unicode content crashes the pager (console) #2738
Conversation
If the string sent to As a quick fix, I think |
Unfortunately, this still leaves us with the same issue if the unicode string cannot be encoded using the I think we should do something like pager.write(string.encode(..., errors='replace')) It's not clear to me that |
Also this would be "fixed" (although still broken) if it was a try/finally block: pager = ...
try:
pager.write(...)
finally:
pager.close() |
Ok. I've updated this to use On Python 2, I did add the I attempted the refactor to |
Thanks, that looks OK to me. @bfroehle , I'll let you have another look, and you can merge away if you're happy with it. |
retval = None | ||
else: | ||
retval = 1 | ||
except OSError: | ||
# Other strange problems, sometimes seen in Win2k/cygwin | ||
retval = 1 | ||
raise |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new raise
here... why?
Looks okay to me, with the one exception of the new |
Sorry -- the new |
Unicode content crashes the pager (console)
Thanks again @mdboom. |
We've run into an interesting bug in the astropy project. astropy/astropy#600 When displaying a docstring that contains Unicode and is also long enough that it gets sent to the pager it fails since the docstring can't be sent to the pager as ascii. This crashes in the middle of sending content to the pager, so the shell ends up in an inconsistent state and stops echoing the keyboard etc. The fix (attached) is merely to encode the content sent to the pager in the same encoding as the terminal (`sys.stdout.encoding`). Strictly speaking, this isn't always the right thing to do, since the pager may be configured to expect a different encoding than the terminal, but that is sort of an irrational way to configure a machine... ;) For example, `less`, in the absence of any special environment variables to tell it otherwise, uses the standard `LC*` environment variables to determine what to do, which should be the same mechanism the terminal also uses by default. If anyone can suggest a better fix, I'm all for it. Perhaps it should be configurable, defaulting to `sys.stdout.encoding`?
Unicode content crashes the pager (console)
We've run into an interesting bug in the astropy project.
astropy/astropy#600
When displaying a docstring that contains Unicode and is also long enough that it gets sent to the pager it fails since the docstring can't be sent to the pager as ascii. This crashes in the middle of sending content to the pager, so the shell ends up in an inconsistent state and stops echoing the keyboard etc.
The fix (attached) is merely to encode the content sent to the pager in the same encoding as the terminal (
sys.stdout.encoding
). Strictly speaking, this isn't always the right thing to do, since the pager may be configured to expect a different encoding than the terminal, but that is sort of an irrational way to configure a machine... ;) For example,less
, in the absence of any special environment variables to tell it otherwise, uses the standardLC*
environment variables to determine what to do, which should be the same mechanism the terminal also uses by default.If anyone can suggest a better fix, I'm all for it. Perhaps it should be configurable, defaulting to
sys.stdout.encoding
?