Node.js 如何检测节点';s process.stdout是否正在通过管道传输?

Node.js 如何检测节点';s process.stdout是否正在通过管道传输?,node.js,shell,pipe,tty,Node.js,Shell,Pipe,Tty,是否有任何方法可以检测Node.js脚本的输出是否通过管道传输到终端以外的其他对象 我想知道是否发生了这种情况: node myscript.js|less 或者如果发生这种情况: 节点myscript.js最简单的方法是处理.stdout.isTTY(0.8+): (官方文件中的示例) 或者,您可以使用用于更细粒度控制的: if (require('tty').isatty(1)) { // terminal } 您可以通过查看正在运行的进程的文件描述符指向的位置来检查该进程的标准输

是否有任何方法可以检测Node.js脚本的输出是否通过管道传输到终端以外的其他对象

我想知道是否发生了这种情况:

node myscript.js|less

或者如果发生这种情况:


节点myscript.js

最简单的方法是
处理.stdout.isTTY
(0.8+):

(官方文件中的示例)

或者,您可以使用用于更细粒度控制的:

if (require('tty').isatty(1)) {
    // terminal
}

您可以通过查看正在运行的进程的文件描述符指向的位置来检查该进程的标准输出是否通过管道传输,例如,如下所示

readlink /proc/<your process id>/fd/1

为什么不从节点处理此问题?传递命令行参数以将其发送到less。它的灵活性要小得多,但如果你想知道它被管道传输,你就失去了这种灵活性。@damphat如果它在windows上不工作,那真的很奇怪:)它实际上只是在
uv\u获取句柄
,它只是在
/src/win/
(windows处理逻辑)下执行,
handle.c
中调用:)
readlink /proc/<your process id>/fd/1
[[ $(readlink /proc/$(pgrep -f 'node myscript.js')/fd/1) =~ ^pipe ]] && echo piped