如何将所有 Brython 输出重定向到 textarea 元素
How can I redirect all Brython output to a textarea element
我有问题。
我需要将 所有 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>
。
我试图搜索示例,但没有找到。
原始 sys.stdout
有方法 write()
并且 print()
使用 sys.stdout.write()
将文本发送到控制台。
您必须创建 class,它也有方法 write()
,并将此 class 分配给 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>
我有问题。
我需要将 所有 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>
。
我试图搜索示例,但没有找到。
原始 sys.stdout
有方法 write()
并且 print()
使用 sys.stdout.write()
将文本发送到控制台。
您必须创建 class,它也有方法 write()
,并将此 class 分配给 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>