在 NodeJS 进程中创建 bash 包装器
Creating a bash wrapper in NodeJS process
我想构建一个小脚本,运行 应该创建一个类似于 bash 的会话(在当前的 bash 会话中,进程被创建),它可以稍后用于一些疯狂的科学(例如管道到浏览器)。
我尝试使用 pty.js,管道 stdin
到 bash
进程,以及从 bash 会话到 stdout
流的数据:
var pty = require("pty.js");
var term = pty.spawn('bash', [], {
name: 'xterm-color',
cols: process.stdout.columns,
rows: process.stdout.rows,
cwd: ".",
env: process.env
});
term.pipe(process.stdout);
process.stdin.pipe(term);
term.on("close", function () {
process.exit();
});
这有效,但它有很多错误:
例如,不捕获非字符(方向键、制表符等)。
我也试过使用 spawn
,这还不错,但仍然有问题。
var spawn = require("child_process").spawn;
var bash = spawn("bash");
bash.stdout.pipe(process.stdout);
process.stdin.pipe(bash.stdin);
有没有更好的解决方案如何在 NodeJS 中创建 bash 包装器?
您可能希望将标准输入放入 raw mode。这样所有的击键都会被报告为一个数据事件。否则你只会得到行(每次按下 return
键)。
process.stdin.setEncoding('utf8');
process.stdin.setRawMode(true);
var pty = require('pty.js');
var term = pty.spawn('bash', [], {
name: 'xterm-color',
cols: process.stdout.columns,
rows: process.stdout.rows,
cwd: '.',
env: process.env
});
term.pipe(process.stdout);
process.stdin.pipe(term);
term.on('close', function () {
process.exit();
});
也许你也能从中找到更多其他人的经验related question。
PS:Vim 现在运行得更好了:P
我想构建一个小脚本,运行 应该创建一个类似于 bash 的会话(在当前的 bash 会话中,进程被创建),它可以稍后用于一些疯狂的科学(例如管道到浏览器)。
我尝试使用 pty.js,管道 stdin
到 bash
进程,以及从 bash 会话到 stdout
流的数据:
var pty = require("pty.js");
var term = pty.spawn('bash', [], {
name: 'xterm-color',
cols: process.stdout.columns,
rows: process.stdout.rows,
cwd: ".",
env: process.env
});
term.pipe(process.stdout);
process.stdin.pipe(term);
term.on("close", function () {
process.exit();
});
这有效,但它有很多错误:
例如,不捕获非字符(方向键、制表符等)。
我也试过使用 spawn
,这还不错,但仍然有问题。
var spawn = require("child_process").spawn;
var bash = spawn("bash");
bash.stdout.pipe(process.stdout);
process.stdin.pipe(bash.stdin);
有没有更好的解决方案如何在 NodeJS 中创建 bash 包装器?
您可能希望将标准输入放入 raw mode。这样所有的击键都会被报告为一个数据事件。否则你只会得到行(每次按下 return
键)。
process.stdin.setEncoding('utf8');
process.stdin.setRawMode(true);
var pty = require('pty.js');
var term = pty.spawn('bash', [], {
name: 'xterm-color',
cols: process.stdout.columns,
rows: process.stdout.rows,
cwd: '.',
env: process.env
});
term.pipe(process.stdout);
process.stdin.pipe(term);
term.on('close', function () {
process.exit();
});
也许你也能从中找到更多其他人的经验related question。
PS:Vim 现在运行得更好了:P