dg-extract-results.py: For Python 3, force sys.stdout to handle surrogate escape sequences.

contrib/
	* dg-extract-results.py: For Python 3, force sys.stdout to handle
	surrogate escape sequences.
	(safe_open): New function.
	(output_segment, main): Use it.

From-SVN: r211666
This commit is contained in:
Richard Sandiford 2014-06-14 09:49:07 +00:00 committed by Richard Sandiford
parent 56444a325d
commit e6120abeb0
2 changed files with 22 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2014-06-14 Richard Sandiford <rdsandiford@googlemail.com>
* dg-extract-results.py: For Python 3, force sys.stdout to handle
surrogate escape sequences.
(safe_open): New function.
(output_segment, main): Use it.
2014-05-25 Richard Sandiford <rdsandiford@googlemail.com>
* dg-extract-results.py (Named): Remove __cmp__ method.

View File

@ -10,6 +10,7 @@
import sys
import getopt
import re
import io
from datetime import datetime
from operator import attrgetter
@ -21,6 +22,18 @@ strict = False
# they should keep the original order.
sort_logs = True
# A version of open() that is safe against whatever binary output
# might be added to the log.
def safe_open (filename):
if sys.version_info >= (3, 0):
return open (filename, 'r', errors = 'surrogateescape')
return open (filename, 'r')
# Force stdout to handle escape sequences from a safe_open file.
if sys.version_info >= (3, 0):
sys.stdout = io.TextIOWrapper (sys.stdout.buffer,
errors = 'surrogateescape')
class Named:
def __init__ (self, name):
self.name = name
@ -457,7 +470,7 @@ class Prog:
# Output a segment of text.
def output_segment (self, segment):
with open (segment.filename, 'r') as file:
with safe_open (segment.filename) as file:
file.seek (segment.start)
for i in range (segment.lines):
sys.stdout.write (file.readline())
@ -540,7 +553,7 @@ class Prog:
try:
# Parse the input files.
for filename in self.files:
with open (filename, 'r') as file:
with safe_open (filename) as file:
self.parse_file (filename, file)
# Decide what to output.