def _manuals_copy(directory, log=None, *manuals):
"""
Copies the gzipped manual page(s) in 'manuals' to the subdirectory of
'directory' that ends with an extra manual section number if it exists;
for example, if one of the basename of manual in 'manuals' is named 'git.1'
and a subdirectory '/usr/share/man/man1/' exists, it will be installed to
that subdirectory instead; otherwise falls back to '/usr/share/man/'.
Also invokes the 'write' method of 'log' to append the file names of
gzipped manual page(s) copied if 'log' is not None.
"""
# Based on example from
# https://docs.python.org/3/library/gzip.html
for manual in manuals:
if not manual_check(manual):
raise TypeError(("The manual page {0} ".format(manual) +
"is not in unix 'manpage' format"))
if not os.path.isfile(manual):
raise FileNotFoundError(("The manual page {0} ".format(manual) +
"does not exist"))
# Test whether there exists extra manual subdirectory ends with
# manual section number; for example,
# '/usr/share/man/man1/'
# if so, use this subdirectory instead; otherwise fall back to
# '/usr/share/man/'
path_postfix = os.path.splitext(manual)[-1][-1]
man_subdir = directory + "man" + path_postfix + os.sep
if os.path.isdir(man_subdir) and os.access(man_subdir, os.W_OK):
target_manpage = man_subdir + os.path.basename(manual) + ".gz"
else:
target_manpage = directory + os.path.basename(manual) + ".gz"
with open(manual, "rb") as input_manpage:
with gzip.open(target_manpage, "wb") as output_manpage:
shutil.copyfileobj(input_manpage, output_manpage)
if log:
log.write(target_manpage)
python类html()的实例源码
def compress(body, compress_level):
"""Compress 'body' at the given compress_level."""
import zlib
# See http://www.gzip.org/zlib/rfc-gzip.html
yield ntob('\x1f\x8b') # ID1 and ID2: gzip marker
yield ntob('\x08') # CM: compression method
yield ntob('\x00') # FLG: none set
# MTIME: 4 bytes
yield struct.pack('<L', int(time.time()) & int('FFFFFFFF', 16))
yield ntob('\x02') # XFL: max compression, slowest algo
yield ntob('\xff') # OS: unknown
crc = zlib.crc32(ntob(''))
size = 0
zobj = zlib.compressobj(compress_level,
zlib.DEFLATED, -zlib.MAX_WBITS,
zlib.DEF_MEM_LEVEL, 0)
for line in body:
size += len(line)
crc = zlib.crc32(line, crc)
yield zobj.compress(line)
yield zobj.flush()
# CRC32: 4 bytes
yield struct.pack('<L', crc & int('FFFFFFFF', 16))
# ISIZE: 4 bytes
yield struct.pack('<L', size & int('FFFFFFFF', 16))
def compress(body, compress_level):
"""Compress 'body' at the given compress_level."""
import zlib
# See http://www.gzip.org/zlib/rfc-gzip.html
yield ntob('\x1f\x8b') # ID1 and ID2: gzip marker
yield ntob('\x08') # CM: compression method
yield ntob('\x00') # FLG: none set
# MTIME: 4 bytes
yield struct.pack("<L", int(time.time()) & int('FFFFFFFF', 16))
yield ntob('\x02') # XFL: max compression, slowest algo
yield ntob('\xff') # OS: unknown
crc = zlib.crc32(ntob(""))
size = 0
zobj = zlib.compressobj(compress_level,
zlib.DEFLATED, -zlib.MAX_WBITS,
zlib.DEF_MEM_LEVEL, 0)
for line in body:
size += len(line)
crc = zlib.crc32(line, crc)
yield zobj.compress(line)
yield zobj.flush()
# CRC32: 4 bytes
yield struct.pack("<L", crc & int('FFFFFFFF', 16))
# ISIZE: 4 bytes
yield struct.pack("<L", size & int('FFFFFFFF', 16))