Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
d17c1e69
Commit
d17c1e69
authored
Feb 20, 2015
by
Serhiy Storchaka
Browse files
Options
Browse Files
Download
Plain Diff
Issue #23374: Fixed pydoc failure with non-ASCII files when stdout encoding
differs from file system encoding (e.g. on Mac OS).
parents
cb5fe14d
8d7fb404
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
25 additions
and
9 deletions
+25
-9
Lib/pydoc.py
Lib/pydoc.py
+13
-9
Lib/test/test_pydoc.py
Lib/test/test_pydoc.py
+9
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/pydoc.py
View file @
d17c1e69
...
...
@@ -1405,9 +1405,6 @@ class _PlainTextDoc(TextDoc):
def
pager
(
text
):
"""The first time this is called, determine what kind of pager to use."""
global
pager
# Escape non-encodable characters to avoid encoding errors later
encoding
=
sys
.
getfilesystemencoding
()
text
=
text
.
encode
(
encoding
,
'backslashreplace'
).
decode
(
encoding
)
pager
=
getpager
()
pager
(
text
)
...
...
@@ -1450,10 +1447,12 @@ def plain(text):
def
pipepager
(
text
,
cmd
):
"""Page through text by feeding it to another program."""
pipe
=
os
.
popen
(
cmd
,
'w'
)
import
subprocess
proc
=
subprocess
.
Popen
(
cmd
,
shell
=
True
,
stdin
=
subprocess
.
PIPE
)
try
:
pipe
.
write
(
text
)
pipe
.
close
()
with
proc
:
with
io
.
TextIOWrapper
(
proc
.
stdin
,
errors
=
'backslashreplace'
)
as
pipe
:
pipe
.
write
(
text
)
except
OSError
:
pass
# Ignore broken pipes caused by quitting the pager program.
...
...
@@ -1461,16 +1460,21 @@ def tempfilepager(text, cmd):
"""Page through text by invoking a program on a temporary file."""
import
tempfile
filename
=
tempfile
.
mktemp
()
with
open
(
filename
,
'w'
)
as
file
:
with
open
(
filename
,
'w'
,
errors
=
'backslashreplace'
)
as
file
:
file
.
write
(
text
)
try
:
os
.
system
(
cmd
+
' "'
+
filename
+
'"'
)
finally
:
os
.
unlink
(
filename
)
def
_escape_stdout
(
text
):
# Escape non-encodable characters to avoid encoding errors later
encoding
=
getattr
(
sys
.
stdout
,
'encoding'
,
None
)
or
'utf-8'
return
text
.
encode
(
encoding
,
'backslashreplace'
).
decode
(
encoding
)
def
ttypager
(
text
):
"""Page through text on a text terminal."""
lines
=
plain
(
text
).
split
(
'
\
n
'
)
lines
=
plain
(
_escape_stdout
(
text
)
).
split
(
'
\
n
'
)
try
:
import
tty
fd
=
sys
.
stdin
.
fileno
()
...
...
@@ -1514,7 +1518,7 @@ def ttypager(text):
def
plainpager
(
text
):
"""Simply print unformatted text. This is the ultimate fallback."""
sys
.
stdout
.
write
(
plain
(
text
))
sys
.
stdout
.
write
(
plain
(
_escape_stdout
(
text
)
))
def
describe
(
thing
):
"""Produce a short description of the given thing."""
...
...
Lib/test/test_pydoc.py
View file @
d17c1e69
...
...
@@ -34,6 +34,10 @@ try:
except
ImportError
:
threading
=
None
class
nonascii
:
'Це не латиниця'
pass
if
test
.
support
.
HAVE_DOCSTRINGS
:
expected_data_docstrings
=
(
'dictionary for instance variables (if defined)'
,
...
...
@@ -460,6 +464,11 @@ class PydocDocTest(unittest.TestCase):
self
.
assertEqual
(
expected
,
result
,
"documentation for missing module found"
)
def
test_not_ascii
(
self
):
result
=
run_pydoc
(
'test.test_pydoc.nonascii'
,
PYTHONIOENCODING
=
'ascii'
)
encoded
=
nonascii
.
__doc__
.
encode
(
'ascii'
,
'backslashreplace'
)
self
.
assertIn
(
encoded
,
result
)
def
test_input_strip
(
self
):
missing_module
=
" test.i_am_not_here "
result
=
str
(
run_pydoc
(
missing_module
),
'ascii'
)
...
...
Misc/NEWS
View file @
d17c1e69
...
...
@@ -13,6 +13,9 @@ Core and Builtins
Library
-------
- Issue #23374: Fixed pydoc failure with non-ASCII files when stdout encoding
differs from file system encoding (e.g. on Mac OS).
- Issue #23481: Remove RC4 from the SSL module'
s
default
cipher
list
.
-
Issue
#
21548
:
Fix
pydoc
.
synopsis
()
and
pydoc
.
apropos
()
on
modules
with
empty
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment