gpt4 book ai didi

python - 捕获 dis.dis 结果

转载 作者:太空狗 更新时间:2023-10-29 17:04:24 26 4
gpt4 key购买 nike

有没有办法在不重定向 sys.stdout 的情况下获取 dis.dis() 的输出?我试过:

out=str(dis.dis())

out=""""""
out+=str(dis.dis())

但是我很快发现它返回None。有什么办法可以解决这个问题吗?

最佳答案

不幸的是,在 Python 3.4 之前的版本中,dis 模块使用打印语句到标准输出,所以它不会直接返回任何有用的东西。要么必须重新实现 disdisassembledisassemble_string 函数,要么临时替换 sys.stdout使用替代方法来捕获输出:

import sys
from cStringIO import StringIO

out = StringIO()
stdout = sys.stdout
sys.stdout = out
try:
dis.dis()
finally:
sys.stdout = stdout
out = out.getvalue()

这实际上最好使用上下文管理器来完成:

import sys
from contextlib import contextmanager
from cStringIO import StringIO

@contextmanager
def captureStdOut(output):
stdout = sys.stdout
sys.stdout = output
try:
yield
finally:
sys.stdout = stdout

out = StringIO()
with captureStdOut(out):
dis.dis()
print out.getvalue()

即使 dis 出现问题,您也可以保证恢复 stdout。一个小示范:

>>> out = StringIO()
>>> with captureStdOut(out):
... dis.dis(captureStdOut)
...
>>> print out.getvalue()
83 0 LOAD_GLOBAL 0 (GeneratorContextManager)
3 LOAD_DEREF 0 (func)
6 LOAD_FAST 0 (args)
9 LOAD_FAST 1 (kwds)
12 CALL_FUNCTION_VAR_KW 0
15 CALL_FUNCTION 1
18 RETURN_VALUE

在 Python 3.4 及更高版本中,相关函数采用 file 参数将输出重定向到:

from io import StringIO

with StringIO() as out:
dis.dis(file=out)
print(out.getvalue())

关于python - 捕获 dis.dis 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com