Подтвердить что ты не робот

Получите результаты dis.dis() в строке

Я пытаюсь сравнить байт-код двух вещей с difflib, но dis.dis() всегда печатает его на консоли. Любой способ получить вывод в строке?

4b9b3361

Ответ 1

Использует StringIO для переопределения std в объект типа string (решение python 2.7)

import sys
import StringIO
import dis

def a():
    print "Hello World"

stdout = sys.stdout # Hold onto the stdout handle
f = StringIO.StringIO()
sys.stdout = f # Assign new stdout

dis.dis(a) # Run dis.dis()

sys.stdout = stdout # Reattach stdout

print f.getvalue() # print contents

Ответ 2

Если вы используете Python 3.4 или новее, вы можете получить эту строку, используя метод Bytecode.dis():

>>> s = dis.Bytecode(lambda x: x + 1).dis()
>>> print(s)
  1           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (1)
              6 BINARY_ADD
              7 RETURN_VALUE

Вы также можете взглянуть на dis.get_instructions(), который возвращает итератор именованных кортежей, каждый из которых соответствует инструкции байт-кода.