2011-12-15 64 views
1

我想用Node.js做一些簡單的事情(在更大的上下文中)。基本上,這樣做:'貓'輸出到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); 
}); 

但它不工作,它只是輸出「貓」到標準輸出,而不是爲「final_file」。 [編輯]重要提示他們是AVI文件

關於如何使它工作的任何想法?

回答

6

>重定向符號是您的shell的一個功能,而不是操作系統或cat的功能。當你打電話cat用>作爲參數,它是作爲一個參數如果你想保存這些文件的內容做的內側上(「數據」)函數傳遞

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

cat = spawn('cat',["file1.avi", "file2.avi"]);  
cat.stdout.on("data", function (data) { 
    console.log(data); 
}); 
+0

事實上,應該想過這樣 – Mikushi 2011-12-15 18:27:12

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(); 
    } 
    }); 
} 

(未經測試)