Nodejs打印到非标准输出

时间:2016-06-22 18:56:47

标签: node.js redirect file-descriptor output-redirect

节点5.4.1 Windows 10

//program.js
console.log("hello world");

我想要实现的是node program.js 3> file.txt

//file.txt
hello world

我试过了:

fs.createWriteStream(null,{fd:3})
//creates error bad file descriptor

fs.openSync(null,{fd:3})
//Another error


var tty = require("tty");
var out = new tty.WriteStream(3);
//Empty print

我不知道还有什么可以尝试的。任何建议。

3 in 3>文件是什么。

我甚至不知道要搜索的术语。 我用过:

文件描述符

非标准输出

输出3

如果我的问题没有明确说明我想要的内容请发表评论,以便我能纠正错误的地方。

我试图定义:

我想要什么。

我尝试了什么。

我看的地方。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

该程序应该满足您的需求:

var fs = require('fs');
var stream = fs.createWriteStream(null, {fd: 3});
stream.write("OK\n");

如果在没有正确重定向的情况下运行,则会出现“EBADF:bad file descriptor”错误:

$ node fd3.js
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: EBADF: bad file descriptor, write
    at Error (native)

当使用FD 3的重定向运行时,它会打印OK:

$ node fd3.js 3>&1
OK

如果它在Windows上不起作用,那么可能是Node或fs模块中的错误,您应该报告它或查看它是否已经报告过:

你实际上没有显示你得到的错误所以很难回答你的问题。

更新

正如我在评论中写的那样,如果它是Node或fs模块中的错误,或者可能是错误调用的问题,或者错误,那么查看确切的错误消息是非常有用的。程序 - 在您的问题中,您将展示如何打开流,但不显示您实际上是如何尝试打印任何内容的。

例如,我可以用这两种方式运行我的示例程序:

node fd3.js 2>&1

或:

node fd3.js 3>&4

在这两种情况下,我都可以说我得到了“错误的文件描述符”错误,但这两个错误实际上是不同的描述符上的不同错误,在调用的不同步骤中由不同的子系统报告。

在这里看到这是Windows的一个问题,甚至可能没有高于2的文件描述符的概念,我已经通过在Windows 10上运行这个bat文件做了一些实验:

@echo off
echo abc 1>&3

它运作得很好。当我调用它时:

winfdtest 3>file.txt

我在abc中写了file.txt。事实上,当我没有将fd 3重定向到文件时,我甚至没有得到错误的描述符错误,在这种情况下,它被打印到控制台并且没有显示错误。另一方面,当我运行它时:

winfdtest 4>file.txt

abc被打印到控制台,file.txt为空,这意味着正确的描述符被重定向,而那些未被重定向的描述符被打印到控制台。

我的结论是,同样应该在Node中工作,如果没有,那么它就是一个bug。遗憾的是,问题中没有显示确切的代码和确切的错误消息,因此很难确切地说出了什么是错误的。