我想构建一个正在运行的小脚本,该脚本应该创建一个类似于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包装器?
您可能需要将标准输入置于原始模式。这样,所有按键都会作为数据事件报告。否则,您只会得到行(每次按该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();
});
也许您还可以从其他相关问题中找到更多经验。
PS:Vim现在运行得更好:P
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句