节点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
如果我的问题没有明确说明我想要的内容请发表评论,以便我能纠正错误的地方。
我试图定义:
我想要什么。
我尝试了什么。
我看的地方。
非常感谢任何建议。
答案 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。遗憾的是,问题中没有显示确切的代码和确切的错误消息,因此很难确切地说出了什么是错误的。