如何将所有 Brython 输出重定向到 textarea 元素

我有个问题。


我需要将所有Brython 输出重定向到一个<textarea>元素。


这是我的 HTML 文件。


<!DOCTYPE html>

<html>

    <head>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython.min.js"></script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython_stdlib.js"></script>

    </head>

    <body onload="brython(1)">

        <textarea id="console"></textarea>

        <script type="text/python3">

            print('test')

        </script>

    </body>

</html>

我知道默认情况下,Brython 中的所有输出(sys.stdout 和 sys.stderr)都会发送到控制台。


我试过这个:


<!DOCTYPE html>

<html>

    <head>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython.min.js"></script>

        <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython_stdlib.js"></script>

    </head>

    <body onload="brython(1)">

        <textarea id="console"></textarea>

        <script type="text/python3">

            from browser import document

            import sys

            sys.stdout = document['console']

        </script>

        <script type="text/python3">

            print('test')

        </script>

    </body>

</html>

但它给了我一个 AttributeError 。


Traceback (most recent call last):

  module __main__2 line 1

    print('test')

AttributeError: 'TEXTAREA' object has no attribute 'write'

我需要使用print(),因为用户将输入代码,代码的结果将打印到<textarea>.


我试图寻找例子,但没有找到。


胡子哥哥
浏览 33回答 1
1回答

慕后森

原始sys.stdout有方法write()并print()用于sys.stdout.write()将文本发送到控制台。您必须创建也有方法的类write()并将该类分配给sys.stdout. 你write()可以输入文字<textarea>最小的工作示例。<!DOCTYPE html><html>&nbsp; &nbsp; <head>&nbsp; &nbsp; &nbsp; &nbsp; <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython.min.js"></script>&nbsp; &nbsp; &nbsp; &nbsp; <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.8.8/brython_stdlib.js"></script>&nbsp; &nbsp; </head>&nbsp; &nbsp; <body onload="brython(1)">&nbsp; &nbsp; &nbsp; &nbsp; <textarea id="console"></textarea>&nbsp; &nbsp; &nbsp; &nbsp; <script type="text/python3">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import sys&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; from browser import document&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; class MyOutput:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; def __init__(self):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.console = document["console"]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; def write(self, text):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.console.text += text&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sys.stdout = MyOutput()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print("Hello World 1")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print("Hello World 2")&nbsp; &nbsp; &nbsp; &nbsp; </script>&nbsp; &nbsp; </body></html>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Html5