如何强制打印在控制台上写入的内容?

时间:2017-12-03 22:51:49

标签: python

我正在尝试构建一段代码,用于打印出在控制台上写入的内容,但仍会执行任何人在其上写入的内容。例如:

我有这个功能:

def create_set():
    return []

每当有人在控制台中输入c = create_set()时。我希望程序创建集合并打印出字符串"c = create_set()"

我该怎么做?一些帮助会有很大的帮助

1 个答案:

答案 0 :(得分:0)

您可以编写一个装饰器来执行此操作,但您必须将其添加到每个手的每个方法中,或者在模块__dict__中执行一些魔术(我不建议这样做)。这在python 3.6中有效(我测试过),如果你使用它在python 2.7中运行的注释版本。他们将stack - 签名从2.X更改为3.X

from inspect import stack
from functools import wraps

def printer(f):
     @wraps(f)
     def wrapped(*args, **kwargs):
         call_info = stack()[1].code_context  # In Python 2.7.X, replace with stack()[1][4]
         # Use index 1 because 0 is always this wrapper function
         for context in call_info:
             print(context.strip())

         return f(*args, **kwargs)
     return wrapped

像这样使用:

@printer
def test():
    return 5

x = test()

这会将x = test()打印到stdout。如果你想要这个用于调试,那就完全没问题了,但是如果这是你的代码在生产中所依赖的东西我就不推荐它,因为它会扼杀你的性能,例如参见here