有没有办法获得输出而dis.dis()
无需重定向sys.stdout
?我试过了:
out=str(dis.dis())
和
out=""""""
out+=str(dis.dis())
但是我很快发现它又回来了None
。有没有什么办法解决这一问题?
不幸的是,在3.4之前的Python版本中,该dis
模块使用print语句进行stdout,因此它不会返回任何直接有用的东西。要么你不得不重新实施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()
这样,stdout
即使出现问题,也可以确保您已恢复dis
。一点示范:
>>> 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())
我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。
问题内容: 我需要一种方法来干扰编写xsl结果文档,以避免将它们写入文件系统。现在我的模板正在写到一个临时目录,然后我压缩该目录。我想用这种方式写到文件系统。我正在使用撒克逊处理器。可以使用仅使用标准Java库的解决方案。任何建议表示赞赏。 编辑: 我发现了.net saxon api的此类http://www.saxonica.com/documentation/dotnetdoc/Saxon/
问题内容: Java新手问题: 我需要捕获由第三方组件写入printStream的文本。 PrintStream默认为System.err,但可以更改为另一个PrintStream。 查看文档,我找不到将PrintStream的内容定向到字符串编写器/缓冲区的简单方法。 有人可以帮忙吗? 问题答案:
export class SearchService { ... .map((response) => response.json()) .catch((e) => { if (e.status >== 500) { return cachedVersion(); new Error(`${ e.status
问题内容: 我想捕获到字符串的输出。 PHP文档说: 与将结果直接输出到浏览器的任何东西一样,输出控制功能可用于捕获此功能的输出,并将其保存在字符串中(例如)。 这可能如何工作的一个例子是什么? 这是不可能的,因为它不会给我所需的信息。 问题答案: 使用输出缓冲:
我正在尝试在主组中的两个非捕获组之间捕获模式。 我怎么做? 这里是我的正则表达式的一部分:(?p(?:别名\s+?名称.).*?(?:\n)) 我的文本的一部分:别名:公司根CA\n 正确输出:公司根ca 那么谁能解释为什么它不起作用呢?