diff options
Diffstat (limited to 'lab/show_pyc.py')
-rw-r--r-- | lab/show_pyc.py | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/lab/show_pyc.py b/lab/show_pyc.py index 2e21eb64..393e84d2 100644 --- a/lab/show_pyc.py +++ b/lab/show_pyc.py @@ -28,18 +28,16 @@ def show_pyc_file(fname): flags = struct.unpack('<L', f.read(4))[0] hash_based = flags & 0x01 check_source = flags & 0x02 - print("flags 0x%08x" % (flags,)) + print(f"flags 0x{flags:08x}") if hash_based: source_hash = f.read(8) read_date_and_size = False if read_date_and_size: moddate = f.read(4) modtime = time.asctime(time.localtime(struct.unpack('<L', moddate)[0])) - print("moddate %s (%s)" % (binascii.hexlify(moddate), modtime)) - if sys.version_info >= (3, 3): - # 3.3 added another long to the header (size). - size = f.read(4) - print("pysize %s (%d)" % (binascii.hexlify(size), struct.unpack('<L', size)[0])) + print(f"moddate {binascii.hexlify(moddate)} ({modtime})") + size = f.read(4) + print("pysize %s (%d)" % (binascii.hexlify(size), struct.unpack('<L', size)[0])) code = marshal.load(f) show_code(code) @@ -92,13 +90,13 @@ def show_code(code, indent='', number=None): label = "" if number is not None: label = "%d: " % number - print("%s%scode" % (indent, label)) + print(f"{indent}{label}code") indent += " " - print("%sname %r" % (indent, code.co_name)) + print(f"{indent}name {code.co_name!r}") print("%sargcount %d" % (indent, code.co_argcount)) print("%snlocals %d" % (indent, code.co_nlocals)) print("%sstacksize %d" % (indent, code.co_stacksize)) - print("%sflags %04x: %s" % (indent, code.co_flags, flag_words(code.co_flags, CO_FLAGS))) + print(f"{indent}flags {code.co_flags:04x}: {flag_words(code.co_flags, CO_FLAGS)}") show_hex("code", code.co_code, indent=indent) dis.disassemble(code) print("%sconsts" % indent) @@ -107,43 +105,36 @@ def show_code(code, indent='', number=None): show_code(const, indent+" ", number=i) else: print(" %s%d: %r" % (indent, i, const)) - print("%snames %r" % (indent, code.co_names)) - print("%svarnames %r" % (indent, code.co_varnames)) - print("%sfreevars %r" % (indent, code.co_freevars)) - print("%scellvars %r" % (indent, code.co_cellvars)) - print("%sfilename %r" % (indent, code.co_filename)) + print(f"{indent}names {code.co_names!r}") + print(f"{indent}varnames {code.co_varnames!r}") + print(f"{indent}freevars {code.co_freevars!r}") + print(f"{indent}cellvars {code.co_cellvars!r}") + print(f"{indent}filename {code.co_filename!r}") print("%sfirstlineno %d" % (indent, code.co_firstlineno)) show_hex("lnotab", code.co_lnotab, indent=indent) - print(" %s%s" % (indent, ", ".join("%r:%r" % (line, byte) for byte, line in lnotab_interpreted(code)))) + print(" {}{}".format(indent, ", ".join(f"{line!r}:{byte!r}" for byte, line in lnotab_interpreted(code)))) if hasattr(code, "co_linetable"): show_hex("linetable", code.co_linetable, indent=indent) if hasattr(code, "co_lines"): - print(" %sco_lines %s" % ( + print(" {}co_lines {}".format( indent, - ", ".join("%r:%r-%r" % (line, start, end) for start, end, line in code.co_lines()) + ", ".join(f"{line!r}:{start!r}-{end!r}" for start, end, line in code.co_lines()) )) def show_hex(label, h, indent): h = binascii.hexlify(h) if len(h) < 60: - print("%s%s %s" % (indent, label, h.decode('ascii'))) + print("{}{} {}".format(indent, label, h.decode('ascii'))) else: - print("%s%s" % (indent, label)) + print(f"{indent}{label}") for i in range(0, len(h), 60): - print("%s %s" % (indent, h[i:i+60].decode('ascii'))) + print("{} {}".format(indent, h[i:i+60].decode('ascii'))) -if sys.version_info >= (3,): - def bytes_to_ints(bytes_value): - return bytes_value -else: - def bytes_to_ints(bytes_value): - for byte in bytes_value: - yield ord(byte) def lnotab_interpreted(code): # Adapted from dis.py in the standard library. - byte_increments = bytes_to_ints(code.co_lnotab[0::2]) - line_increments = bytes_to_ints(code.co_lnotab[1::2]) + byte_increments = code.co_lnotab[0::2] + line_increments = code.co_lnotab[1::2] last_line_num = None line_num = code.co_firstlineno |