1

私はNode.jsを使って(はるかに大きなコンテキストで)簡単なことをしようとしています。基本的にこれを行う:

cat file1.avi file2.avi file3.avi > final_file.avi

私はこれを試しました:

var spawn = require("child_process").spawn,
    cat = spawn("cat", ["file1.avi","file2.avi", "file3.avi", ">", "final_file.avi"]);

cat.stdout.on("data", function(data) {
    console.log(data);
});

cat.stderr.on("data", function(data) {
    console.log(data);
});

ただし、機能しません。「cat」をstdoutに出力するだけで、「final_file」には出力しません。[編集]AVIファイルであることに注意してください

それを機能させる方法について何かアイデアはありますか?

4

2 に答える 2

6

>リダイレクト記号は、オペレーティングシステムやの機能ではなく、シェルの機能ですcat。>を引数として呼び出すcatと、引数として渡されます。これらのファイルの内容を保存する場合は、on( "data")関数内で実行してください。

var spawn = require('child_process').spawn;

cat = spawn('cat',["file1.avi", "file2.avi"]);    
cat.stdout.on("data", function (data) {
    console.log(data); 
});
于 2011-12-15T18:26:08.420 に答える
3

猫は標準入力を標準出力にパイプするだけです。Node.js ファイル システム モジュールでも同じことができます。

var fs = require('fs');
var inputs = ["file1.avi","file2.avi", "file3.avi"];
var output = fs.createWriteStream("final_file.avi");

function pipe () {
  var input = fs.createReadStream( inputs.shift() );
  output.pipe(input);
  input.on('end', function () {
    if(inputs.length) {
      pipe();
    }
  });
}

(未テスト)

于 2011-12-16T05:00:37.023 に答える