我正在节点(和blessed.js)中创建一个交互式CLI,每隔几秒就会产生一个子进程来运行一些Python脚本。这些脚本修改 CLI 从中提取的一组 JSON 文件。
问题是 CLI 必须始终能够接受来自用户的输入,并且当这些子进程产生时,stdin
CLI/父进程的 似乎被阻塞,看起来 Python 脚本正在前台执行. 这是我用来运行 Python 脚本的代码:
const { spawn } = require("child_process");
function execPythonScript(args) {
return spawn("python3", args, { stdio: "ignore" });
}
execPythonScript(["path_to_script.py"]);
我也尝试将脚本作为后台进程运行,即execPythonScript(["path_to_script.py", "&"])
,但无济于事。有任何想法吗?
提前致谢!
更新:
我开始怀疑这是blessed
and not的问题child-process
,因为我已经用尽了所有相关的方法(及其论点)来生成非阻塞后台进程,但问题仍然存在。
默认情况下,每个blessed
实例都process.stdin
用于输入,但我认为stdin
流可能被子进程用完,即使我将它们stdio
设置为“忽略”。所以我尝试使用ttys并实例化blessed.screen
从活动终端(/dev/tty
)而不是/dev/stdin
:
const ttys = require("ttys");
screen = blessed.screen({
input: ttys.stdin, // Instead of process.stdin
smartCSR: true
});
但是还是卡住了...