- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有没有办法在不重定向 sys.stdout
的情况下获取 dis.dis()
的输出?我试过:
out=str(dis.dis())
和
out=""""""
out+=str(dis.dis())
但是我很快发现它返回None
。有什么办法可以解决这个问题吗?
最佳答案
不幸的是,在 Python 3.4 之前的版本中,dis
模块使用打印语句到标准输出,所以它不会直接返回任何有用的东西。要么必须重新实现 dis
、disassemble
和 disassemble_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/
我试图用 difflib 比较两个东西的字节码,但 dis.dis() 总是将它打印到控制台。有什么方法可以在字符串中获取输出? 最佳答案 如果您使用的是 Python 3.4 或更高版本,则可以使用
我一直在使用 dis 模块来观察 CPython 字节码。但最近,我注意到 dis.dis() 的一些不便行为。 以这个例子为例:我首先定义了一个函数multiplier,里面嵌套了一个函数inner
我正在尝试使用 python 的 dis用于试验和理解性能的库。下面是我尝试过的实验,以及结果。 import dis def myfunc1(dictionary): t = tuple(d
有没有办法在不重定向 sys.stdout 的情况下获取 dis.dis() 的输出?我试过: out=str(dis.dis()) 和 out="""""" out+=str(dis.dis())
我想了解如何使用 dis (the dissembler of Python bytecode) .具体来说,应该如何解释 dis.dis 的输出? (或 dis.disassemble )? . 这
特别是,它输出: >>> dis.dis(None) 22 0 LOAD_FAST 0 (x) 3 LOAD_CONST
有什么方法可以从 dis.dis 获得的反汇编中创建代码对象? 例如,我使用 co = compile('print("lol")', '', 'exec') 编译了一些代码。然后使用 dis.dis
使用 Python 3,dis.dis()适用于解析包含 for 循环语法的字符串: >>> import dis >>> dis.dis('for _ in range(10): pass')
简单的问题。 dis.read() 和 dis.readUTF() 有什么区别? 例如,dis.read()只读取字节数组,而dis.readUTF()访问String类型。 是否正确? 如果服务器有
在32.12. dis — Disassembler for Python bytecode — Python 3.6.3 documentation ,有一个例子说: 示例:给定函数 myfunc(
我将 opencv c++ API 用于计算机视觉应用程序,并使用 cv::Mat 结构管理矩阵。 Opencv 使用引用计数将创建的对象释放为 cv::Mat。我还将 libshogun 用于更具体
最近,我有一个 discussion关于以下两段代码的 SO(请参阅上下文): res = [d.get(next((k for k in d if k in s), None), s) for s
对于大学的一个项目,我们必须实现几种不同的算法来计算给定一组元素和所述元素之间的一组关系时的等价类。 我们被指示实现联合查找算法及其优化(按深度联合、大小联合)等。偶然地(做了一些我认为对算法的正确性
我有一个 EditText 并且想在键盘出现时给它更多的行。所以我正在寻找类似 “OnKeyboardAppearsListener” 的东西,但找不到。我认为它一定存在,但也许以不同的方式... 最
我想知道是否可以在 SAS DIS 中使用条件启动转换来根据给定表是否为空(无行)有条件地绕过另一个转换。 This链接似乎表明条件必须基于参数变量的值。 我的一个想法是在用户编写的代码转换中创建一个
我试图排除某些字符作为 YAML CloudFormation 模板中的参数字符串输入。具体来说,我试图不允许包含&符号。文档说我可以使用AllowedPattern作为正则表达式的参数属性,例如 A
是否有 HLA 的高级概述与 DIS模拟框架?一个可以托管另一个,反之亦然吗? 最佳答案 我目前(虽然只有一周左右)在模拟行业工作 - 对于任何错误,我提前表示歉意,如果我记得不正确的信息,我会纠正它
在使用 Emacs 的多年里,我从未用它来发送电子邮件。总是将其视为一个非常复杂的系统(更不用说电子邮件是一个过于复杂的系统来进行消息传递,但这是一个不同的提示)。现在,第一次使用 Gnus 并将其连
我有以下代码 code = ''' x = ['a','b','c'] for each in x: print(each) ''' 我使用了python的di
我想将文件读入字符数组列表。起初我认为这可能是一个非常巧妙的方法: ArrayList char_chain = new ArrayList(); try { fis = ne
我是一名优秀的程序员,十分优秀!