python:在exec语句中获取打印输出

新手上路,请多包涵

我想获得 exec(...) 的输出——这是我的代码:

 code = """
i = [0,1,2]
for j in i :
    print j
"""
result = exec(code)

我怎样才能得到打印输出的东西?我怎样才能得到这样的东西:

 0
1
2

问候和感谢。

原文由 Bussiere 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

由于 Python 3.4 有一个解决方案是 stdlib: https ://docs.python.org/3/library/contextlib.html#contextlib.redirect_stdout

 from io import StringIO
from contextlib import redirect_stdout

f = StringIO()
with redirect_stdout(f):
    help(pow)
s = f.getvalue()

在旧版本中,您可以编写一个上下文管理器来处理替换标准输出:

 import sys
from io import StringIO
import contextlib

@contextlib.contextmanager
def stdoutIO(stdout=None):
    old = sys.stdout
    if stdout is None:
        stdout = StringIO()
    sys.stdout = stdout
    yield stdout
    sys.stdout = old

code = """
i = [0,1,2]
for j in i :
    print j
"""
with stdoutIO() as s:
    exec(code)

print("out:", s.getvalue())

原文由 Jochen Ritzel 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是@Jochen 回答的 Py3 友好版本。我还添加了 try-except 子句以在 code 出现错误时恢复。

 import sys
from io import StringIO
import contextlib

@contextlib.contextmanager
def stdoutIO(stdout=None):
    old = sys.stdout
    if stdout is None:
        stdout = StringIO()
    sys.stdout = stdout
    yield stdout
    sys.stdout = old

code = """
i = [0,1,2]
for j in i :
    print(j)
"""
with stdoutIO() as s:
    try:
        exec(code)
    except:
        print("Something wrong with the code")
print("out:", s.getvalue())

原文由 Ilya V. Schurov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题