Node.js: можно ли сделать адаптер для python интерактивной оболочки (REPL)? - PullRequest
0 голосов
/ 09 апреля 2020

Можно использовать readline в Node.js, чтобы прочитать строку кода python, затем отправить ее в python интерактивную оболочку spawn ed как дочерний процесс, а затем получить вывод?

Я знаю, что это возможно:

import { spawn } from "child_process";

const py = spawn("python", ["-i"]);

py.stdout.on("data", (data) => {
  console.log(`stdout: ${data}`);
});

py.stdin.write('print("hello from python!")\n');

// will get 'stdout: hello from python!'

Однако это не будет работать:

import { spawn } from "child_process";
import * as readline from "readline";

const py = spawn("python", ["-i"]);

py.stdout.on("data", (data) => {
  console.log(`stdout: ${data}`);
});

py.stdin.write('print("hello from python!")\n');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
rl.prompt();
rl.on("line", (line) => {
  py.stdin.write(line);
  rl.prompt();
}).on("close", () => {
  process.exit()
});

Я хочу сделать это, потому что я хочу разработать интерфейс для python в Node.js. Выполнить отдельную команду / файл python просто через spawn, но я хочу создать полнофункциональный интерфейс, который будет иметь такие же возможности, как Reticulate в R.

...