Я создаю интерактивный CLI в узле (и blessed.js), который порождает дочерние процессы каждые пару секунд для запуска некоторых скриптов Python. Эти сценарии изменяют набор файлов JSON, из которых извлекается CLI.
Проблема заключается в том, что 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", "&"])
, но безрезультатно. Есть идеи?
Заранее спасибо!
UPDATE:
Я начинаю подозревать, что это проблема с 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
});
Но это все еще блокирует ...