我如何在管道node.js进程中获得终端大小

How can I get terminal size in a piped node.js process?

本文关键字:终端 进程 js 管道 node      更新时间:2023-09-26

我使用Grunt启动单元测试框架(Intern),该框架最终为另一个node.js进程提供管道,然后我使用Charm将结果输出到屏幕。我不得不从Grunt配置选项中传递终端大小信息,但这有点混乱,我想尝试从管道进程中获取终端大小,但标准process.stdout。cols/getWindowSize是不可用的,因为管道进程没有注册为TTY(尽管Charm可以很好地使用它)。

有什么建议吗?

EDIT只是在这里明确…Grunt JavaScript文件在主node.js进程中运行,但我试图从中检索此信息的文件(以及我因此运行人们建议的命令的地方)是在派生的子进程中。

试试这些:

  • tput cols告诉您列的数量。
  • tput lines告诉您行数
  • echo -e "lines'ncols"|tput -S获取线条和颜色

有stty, from coretils:

$ stty size #60 120 <= sample output

当在终端中运行下面的代码时打印出颜色:

var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("tput cols", puts);

pty.js模块可以使子终端像普通终端一样工作。

var pty = require('pty.js');
var term = pty.spawn('bash', [], {
  name: 'xterm-color',
  cwd: process.env.HOME,
  env: process.env
});
term.on('data', function(data) {
  console.log(data);
});
term.write('ls'r');
term.resize(100, 40);
term.write('ls /'r');
console.log(term.process);