@@ -3,30 +3,17 @@ editor.setTheme("ace/theme/monokai");
3
3
editor . session . setMode ( "ace/mode/python" ) ;
4
4
5
5
6
- // async function main() {
7
- // let pyodide = await loadPyodide({
8
- // indexURL: "https://cdn.jsdelivr.net/pyodide/v0.18.1/full/",
9
- // stdin: document.getElementById('input-tmp').value
10
- // });
11
- // return pyodide;
12
- // }
13
- // let pyodideReadyPromise = main();
14
-
15
- // async function run_python() {
16
- // let pyodide = await pyodideReadyPromise;
17
- // console.log(pyodide.runPython(`
18
- // input()
19
- // `));
20
- // }
21
-
22
- function setup_pyodide ( ) {
6
+ async function setup_pyodide ( ) {
23
7
// setup pyodide environment to run code blocks as needed
8
+ let pyodide = await pyodideReadyPromise ;
24
9
var setup_code = `
25
10
import sys, io, traceback
11
+ from js import document, console
26
12
namespace = {} # use separate namespace to hide run_code, modules, etc.
27
13
def run_code(code):
28
14
"""run specified code and return stdout and stderr"""
29
15
out = io.StringIO()
16
+ sys.stdin = io.StringIO(document.getElementById('input-tmp').value)
30
17
oldout = sys.stdout
31
18
olderr = sys.stderr
32
19
sys.stdout = sys.stderr = out
@@ -43,12 +30,21 @@ def run_code(code):
43
30
pyodide . runPython ( setup_code )
44
31
}
45
32
46
- function runPython ( ) {
33
+ async function runPython ( ) {
47
34
// run code currently stored in editor
48
- console . log ( editor . getValue ( ) )
35
+ let pyodide = await pyodideReadyPromise ;
49
36
pyodide . globals . code_to_run = editor . getValue ( )
50
37
document . getElementById ( "output" ) . innerText = pyodide . runPython ( 'run_code(code_to_run)' )
51
38
}
52
39
53
- // run setup_pyodide() when pyodide finishes loading
54
- languagePluginLoader . then ( setup_pyodide )
40
+ async function get_pyodide ( ) {
41
+ let pyodide = await loadPyodide ( {
42
+ indexURL : "https://cdn.jsdelivr.net/pyodide/v0.18.1/full/" ,
43
+ } ) ;
44
+ return pyodide ;
45
+
46
+ }
47
+
48
+ let pyodideReadyPromise = get_pyodide ( ) ;
49
+
50
+ pyodideReadyPromise . then ( setup_pyodide )
0 commit comments