From 83b8ec2c60e868dff3e3d92b50187611ab06d9d8 Mon Sep 17 00:00:00 2001 From: Haris Skiadas Date: Sat, 26 Jul 2025 14:04:02 -0400 Subject: [PATCH] On input(..) use inputfun only if sys.stdin has not been overwritten. --- src/builtin.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/builtin.js b/src/builtin.js index 321d0f192..e8f262a6a 100644 --- a/src/builtin.js +++ b/src/builtin.js @@ -701,7 +701,8 @@ Sk.builtin.raw_input = function (prompt) { var lprompt = prompt ? prompt : ""; return Sk.misceval.chain(Sk.importModule("sys", false, true), function (sys) { - if (Sk.inputfunTakesPrompt) { + const isTrueStdin = sys["$d"]["stdin"]["fileno"] == 0; + if (Sk.inputfunTakesPrompt && isTrueStdin) { return Sk.builtin.file.$readline(sys["$d"]["stdin"], null, lprompt); } else { return Sk.misceval.chain( @@ -791,7 +792,7 @@ Sk.builtin.exec = function (code, globals, locals) { ); /**@todo shouldn't have to do this - Sk.globals loses scope*/ const tmp = Sk.globals; - /** + /** * @todo this is not correct outside of __main__ i.e. exec doesn't work inside modules using the module scope * This is because globals don't work outside of __main__ */