[可以在Node.js中使用readline
读取一行python代码,然后将其发送到作为子进程的python交互式shell spawn
中,然后接收输出?
我知道这是可能的:
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()
});
我想这样做,因为我想在Node.js中为python开发一个接口。通过spawn
执行独立的python命令/文件很简单,但是我想构建一个功能齐全的接口,该接口具有与R中的Reticulate类似的功能。
我有一个类似的应用程序,我设法使其运行足以满足我的需要:a processToPromise
function。缺点是它总是必须在每个processToPromise
上注册新的事件侦听器。基本上,它会在命令完成后等待交互式Python shell打印它的call
,并为您提供与此同时出现的输出。
而且,您不能异步调用此函数多次而不会弄乱结果。首先尝试一些简单的打印语句,以查看所达到的期望。
一些参考代码:
>>>