我正在节点(和blessed.js)中创建一个交互式CLI,每隔几秒钟就会生成一个子进程来运行一些Python脚本。这些脚本会修改CLI提取的一组JSON文件。
问题在于CLI必须始终能够接受用户的输入,并且在产生这些子进程时,CLI /父进程的stdin
似乎被阻止,并且看起来像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
而不是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
});
但是它仍然在阻止...
答案 0 :(得分:1)