这是我的代码:
var spawn = require("child_process").spawn
var fs = require("fs")
var p = spawn("ls", ["prprpr"])
var log = fs.createWriteStream("/tmp/prpr.log")
p.stdout.pipe(log)
p.stderr.pipe(log)
当我cat /tmp/prpr.log
时,它返回空,但是当我重定向到process.stdout和process.stderr时,它会正确输出错误
var spawn = require("child_process").spawn
var fs = require("fs")
var p = spawn("ls", ["prprpr"])
var log = fs.createWriteStream("/tmp/prpr.log")
p.stdout.pipe(process.stdout)
p.stderr.pipe(process.stderr)
如何将生成标准输出和标准错误生成到磁盘文件?
我的节点版本:
> roroco@roroco ~/Dropbox/js/ro-evernote $ node -v
v7.3.0
答案 0 :(得分:0)
我找到了解决方法:
当我使用以下另一种方式重定向标准输出时:
var fs = require("fs")
let log = fs.createWriteStream("/tmp/prpr.log");
const child = require("child_process").spawn('ls', ["prprpr"], {stdio: [null, log, log]});
它将提高
TypeError: Incorrect value for stdio stream: WriteStream {
这就是我无法写入日志的原因
我在此answer中找到了解决方案,“打开”时WriteStream可以写
并使用以下代码将起作用:
var fs = require("fs")
let log = fs.createWriteStream("/tmp/prpr.log");
log.on("open", function () {
const child = require("child_process").spawn('ls', ["prprpr"], {stdio: [null, log, log]});
})
答案 1 :(得分:0)
几乎直接来自文档:
const child_process = require("child_process");
const fs = require("fs");
const out = fs.openSync("./stdout.log", "a");
const err = fs.openSync("./stderr.log", "a");
const child = child_process.spawn("ls", ["-alc"], {
stdio: [process.stdin, out, err]
});
您只需要将文件描述符传递给stdio(无需创建流)。 here有很多风格-特别注意detached
和传递'ignore'
的stdin会如何影响孩子如何在父进程中生存。
请记住,传递文件描述符是Node唯一的IPC方式之一。