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