首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将所有Brython输出重定向到textarea元素

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

Stack Overflow用户
提问于 2020-04-21 16:27:23
回答 1查看 610关注 0票数 1

我有个问题。

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

这是我的HTML文件。

代码语言:javascript
复制
<!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)都会转到控制台。

我试过这个:

代码语言:javascript
复制
<!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。

代码语言:javascript
复制
Traceback (most recent call last):
  module __main__2 line 1
    print('test')
AttributeError: 'TEXTAREA' object has no attribute 'write'

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

我试着寻找例子,但没有找到任何例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-21 16:42:21

原始sys.stdoutwrite()方法,print()使用sys.stdout.write()将文本发送到控制台。

您必须创建具有write()方法的类,并将该类分配给sys.stdout。而且您的write()可以在<textarea>中放置文本

最小的工作例子。

代码语言:javascript
复制
<!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>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61348313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档