在字符串中获取dis.dis()的结果

时间:2015-07-10 17:42:01

标签: python python-3.x

我试图用difflib比较两件事的字节码,但dis.dis()总是将它打印到控制台。有什么方法可以在字符串中输出输出吗?

2 个答案:

答案 0 :(得分:3)

如果您使用的是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(),它返回一个名为元组的迭代器,每个迭代器对应一个字节码指令。

答案 1 :(得分:2)

使用StringIO将std out重新定义为类似字符串的对象(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