- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
可以使用readline
在 Node.js 中读取一行 python 代码,然后将其发送到 python 交互式 shell 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()
});
spawn
执行独立的 python 命令/文件很简单,但我想构建一个功能齐全的界面,它具有与
Reticulate 类似的功能在 R。
最佳答案
我有一个类似的应用程序,我设法让它运行得足以满足我的需要:a processToPromise
function .
缺点是它总是必须在每个 call
上注册新的事件监听器。 .基本上,它等待交互式 Python shell 打印它的 >>>
在您的命令完成并为您提供同时出现的输出之后。
此外,您不能多次异步调用此函数而不会得到困惑的结果。
首先尝试一些简单的打印语句,看看你得到了你所期望的。
一些代码供引用:
const child_process = require('child_process');
class InteractiveProcessHandle {
private process: any;
public outputLog: string;
public latestOutput: string;
private processToPromise(process: any) {
return new Promise<string>((resolve, reject) => {
console.log("+++ creating promise");
process.stdout.removeAllListeners();
process.stderr.removeAllListeners();
process.stdin.removeAllListeners();
let lastString: string = '';
process.stdout.on("data", (data: any) => {
data = data.toString().trim();
this.update(data);
if (data.endsWith('>>>')) {
resolve(lastString);
}
lastString = data;
});
process.stderr.on("data", (data: any) => {
data = data.toString().trim();
this.update(data);
if (data.endsWith('>>>')) {
resolve(lastString);
}
lastString = data;
});
process.stdin.on("error", () => {
console.log("Failure in stdin! ... error");
reject();
});
process.stdin.on("close", () => {
console.log("Failure in stdin! ... close");
reject();
});
process.stdin.on("end", () => {
console.log("Failure in stdin! ... end");
reject();
});
process.stdin.on("disconnect", () => {
console.log("Failure in stdin! ... disconnect");
reject();
});
process.stdout.on("error", () => {
console.log("Failure in stdout! ... error");
reject();
});
process.stdout.on("close", () => {
console.log("Failure in stdout! ... close");
reject();
});
process.stdout.on("end", () => {
console.log("Failure in stdout! ... end");
reject();
});
process.stderr.on("error", () => {
console.log("Failure in stderr! ... error");
reject();
});
process.stderr.on("close", () => {
console.log("Failure in stderr! ... close");
reject();
});
process.stderr.on("end", () => {
console.log("Failure in stderr! ... end");
reject();
});
console.log("+++ done creating promise");
});
}
private update(data: any) {
this.latestOutput = data;
this.outputLog += data + "\n";
console.log(`logging from update: "${data}"`);
}
public call(command: string): Promise<string> {
console.log(`called: "${command.trim()}"`);
let promise = this.processToPromise(this.process);
this.process.stdin.write(command);
return promise;
}
constructor(call: any, options: any) {
this.latestOutput = "";
this.outputLog = "";
this.process = child_process.spawn(call, options, { shell: true });
this.process.stdout.setEncoding('utf8');
this.process.stderr.setEncoding('utf8');
}
};
var interactive_python = new InteractiveProcessHandle('python', ['-i']);
async () => {
await interactive_python .call('');
await interactive_python .call('x = 20');
let x = await clang_build.call('print(x)\n');
console.log('x = ', x);
}
关于javascript - Node.js:是否可以为 python 交互式 shell (REPL) 制作适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61115778/
我想在 Sublime Text 中创建一个快捷方式来执行以下操作: 如果 R 的 REPL 已打开,请将所选文本发送到此 REPL 否则在新窗口中打开 R REPL 并将文本发送到此 REPL。 我
和这里的一些提问者一样,我是 Lisp 的新手。我正在浏览 Practical Common Lisp书,但回过头来看看设置网络应用程序有多么容易,所以我一直在关注 this教程,以及 updated
我无法理解我不理解的复合“入门”示例。当我从 http://weavejester.github.com/compojure/docs/getting-started.html 运行示例时 ...我在
这个问题在这里已经有了答案: Running a Common Lisp function from a Terminal command prompt (4 个答案) 关闭 8 年前。 我正在尝试
我正在尝试使用 REPL 中给出的文本更改 Node 的 REPL 的提示。 我最初的尝试是这样的。 import repl from 'repl' let PROMPT = 'original >
我使用 Scala 语言已经有几个月了,并且已经在 Scala 中创建了几个项目。我发现 Scala REPL(至少是它的 IntelliJ 工作表实现)对于快速开发来说非常方便。我可以编写代码,看看
我进入正题。我已经安装了 SublimeText 3,我还通过 Package Control 安装了 SublimeREPL,我基本上已经根据需要进行了设置。 让我烦恼的主要事情是,每次我构建一个
我尝试使用相同的算法运行两个阶乘函数,一个在 Scala 中,另一个在 Clojure 中: // Scala: def factorial(n:Int) = (1 to n).foldLeft(1:
我开始喜欢 Scala REPL 使用 resX 引用以前计算的能力,并且想知道是否有一种方法可以在 Python/bpython/iPython REPL 中访问它。 最佳答案 默认的 python
我进入正题。我已经通过 Package Control 安装了 SublimeREPL,并且我已经按照我的需要进行了很多设置。 唯一困扰我的是,每次我构建 python 脚本 (CTRL+B) 时,都
定义完变量、函数等之后,你能不能把你在REPL上所做的也保存成一个文本.clj文件? 最佳答案 大多数人通过诸如广告 Eclipse/Emacs/vim 之类的编辑器使用 repl,并且该编辑器能够保
Scala REPL 非常适合尝试不同的代码片段。如果可以使用 Scala REPL 中的 Maven 存储库中的库运行代码,那就太好了。如何将远程 Maven 存储库添加到 Scala REPL 类
常规 Clojure 复制 clojure.main/repl接受类似 :print 的选项, :prompt和 :eval这让您可以连接并覆盖 repl 的行为。 例如。 (clojure.main
我正在开发我的第一个全栈 Clojure 应用程序。我已经设法让以下内容在 Linux Mint 中正常工作: 莱宁根 figwheel + garden[auto] = 使用热代码和 CSS 重新加
运行基本的 df.show() post spark notebook 安装 在 spark-notebook 上运行 scala - spark code 时出现以下错误。知道这种情况何时发生以及如
我一直在尝试 Javascript haskell-js库,但我偶然发现了 Coffeescript REPL 的奇怪行为。 使用节点,以下示例可以按预期工作: $ node require('has
在 Swift REPL 中,有什么方法可以保留 REPL 状态? 例如,我想在 REPL 中做一些工作,然后保存它,以便稍后加载。 这个概念可能被命名为保存/加载、暂停/恢复、快照/克隆、序列化/反
我正在尝试使用 REPL 来测试我的 java 代码。我已经设置了类路径并启动了 REPL,我可以在 REPL 中访问我的应用程序类。 我启动了一个进行 Web 服务调用的方法,它抛出了 java.l
嗨,我从 haskell 开始,并尝试设置我的 emacs 以进行开发。 我有 haskell-mod和 ghc-mod最新 emacs 24.3.1 . GHC 是 7.6.3 我创建了一个 has
我需要使用一个文档不足的 Java 库,如果有一种方法可以查看 REPL 中方法的签名(用于快速实验),它将对我有所帮助。考虑以下: user=> (import 'x.y.z.C) user=> (
我是一名优秀的程序员,十分优秀!