我想获得 exec(...)
的输出——这是我的代码:
code = """
i = [0,1,2]
for j in i :
print j
"""
result = exec(code)
我怎样才能得到打印输出的东西?我怎样才能得到这样的东西:
0
1
2
问候和感谢。
原文由 Bussiere 发布,翻译遵循 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 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答869 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
由于 Python 3.4 有一个解决方案是 stdlib: https ://docs.python.org/3/library/contextlib.html#contextlib.redirect_stdout
在旧版本中,您可以编写一个上下文管理器来处理替换标准输出: