当使用以下代码来拖尾文件时,我们可以成功输出数据。
var spawn = require('child_process').spawn;
var filename = '/logs/error.log';
var tail = spawn("tail", ["-f", filename]);
tail.stdout.on("data", function (data) {
console.log(data);
});
但是当我将文件名更改为“/logs/*.log”时,我找不到任何输出。谁能告诉我是什么原因?谢谢!
答案 0 :(得分:2)
在控制台上输入tail -f /logs/*.log
时,/logs/*.log
的扩展由shell处理;当tail
程序获得参数时,它们已经扩展到tail -f /logs/error.log /logs/other.log
。您需要自己为Node进行扩展:
var fs = require('fs');
var spawn = require('child_process').spawn;
var filename = fs.readdirSync('/logs').map(function(file) { return '/logs/' + file });
var tail = spawn("tail", ["-f"].concat(filename));
tail.stdout.on("data", function (data) {
console.log(data);
});
答案 1 :(得分:0)
因为tail
和spawn
都不知道如何使用通配符将文件名扩展为匹配的文件名集。这通常由shell执行,因此在这种情况下,您需要自己在代码中执行此操作。