1

次のコードを使用してファイルを末尾にすると、データを正常に出力できます。

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」に変更すると、何も出力されません。理由は誰に教えてもらえますか?ありがとう!

4

2 に答える 2

2

tail -f /logs/*.logコンソールで入力する場合、展開/logs/*.logはシェルによって処理されます。プログラムが引数を取得するtailまでに、引数は既に に展開されていtail -f /logs/error.log /logs/other.logます。ノードの拡張は自分で行う必要があります。

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);
});
于 2012-07-17T03:00:57.663 に答える
0

ワイルドカードを含むファイル名を一致するファイル名のセットに展開する方法tailも知らないためです。spawnこれは通常、シェルによって実行されるため、この場合はコードで自分で行う必要があります。

于 2012-07-17T03:00:05.337 に答える