Python ASTEVAL。我怎样才能抓住stdou

2024-04-19 09:02:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我考虑将^{} python package用于我的个人web应用程序。在

ASTEVAL is a safe(ish) evaluator of Python expressions and statements, using Python's ast module. The idea is to provide a simple, safe, and robust miniature mathematical language that can handle user-input.

我面临的问题是我无法获得asteval的标准输出。我试着用下面的片段捕捉它:

from asteval import Interpreter

aeval = Interpreter()

from cStringIO import StringIO
import sys

class Capturing(list):
    def __enter__(self):
        self._stdout = sys.stdout
        sys.stdout = self._stringio = StringIO()
        return self
    def __exit__(self, *args):
        self.extend(self._stringio.getvalue().splitlines())
        sys.stdout = self._stdout

然后:

^{pr2}$

但是运气不好,output是一个空列表。在


Tags: andfromimportselfwebpackageisdef
1条回答
网友
1楼 · 发布于 2024-04-19 09:02:34

您可以将文件对象(writer)传递给Interpreter()类:

output = StringIO()
aeval = Interpreter(writer=output)

如果不指定,writer默认为sys.stdout,并在实例化Interpreter()时设置。这就是替换sys.stdout不起作用的原因;实例已经有了自己的引用。在

演示:

^{pr2}$

相关问题 更多 >