为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡子哥哥 2024-01-22 15:43:51
我有个问题。我需要将所有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>.我试图寻找例子,但没有找到。
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

原始sys.stdout有方法write()并print()用于sys.stdout.write()将文本发送到控制台。


您必须创建也有方法的类write()并将该类分配给sys.stdout. 你write()可以输入文字<textarea>


最小的工作示例。


<!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">

            import sys

            from browser import document


            class MyOutput:

                def __init__(self):

                    self.console = document["console"]


                def write(self, text):

                    self.console.text += text


            sys.stdout = MyOutput()


            print("Hello World 1")


            print("Hello World 2")


        </script>

    </body>

</html>


查看完整回答
反对 回复 2024-01-22
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信