2013-07-12 35 views
0

我試圖下載大量使用和的NodeJS的exec命令文件,簡化這樣的:的Node.js Exec用wget的

var cmd = 'wget -O output.csv URL'; 
var child = exec(cmd, function(err) { 
    console.log('DONE'); 
}); 

然而,在該文件是通過實際下載被觸發回調wget,導致一個包含垃圾的文件,如' 0 6D 1n ]v # '。一旦wget完成,不應該觸發回調?當在命令行上運行相同的命令時,它會花費5秒鐘,因爲該文件有幾個MB。

順便說一句:我沒有使用request模塊,因爲它比較慢,我碰到了發射器監聽器問題(EventEmitter memory leak detected. 11 listeners added)。

謝謝!

+0

看起來您正在看到ANSI轉義碼。 6D的意思是「光標後退6個字符」..你能否確認'wget -O - URL'返回你期望的文本? –

+0

好耶,試試這個網址:HTTP'?//productdata.zanox.com/exportservice/v1/rest/22791753C32335607.csv \門票\ = BC4B91472561713FD43BA766542E9240AFDD01B95B123E40B2C0375E3A68C142 \&columnDelimiter \ = \&TEXTQUALIFIER \ =雙引號\&nullOutputFormat \ = NullValue屬性\ &DATEFORMAT \ = YYYY-MM-DD%27T%27HH:MM:SS:SSS \&decimalSeparator \ =週期\&ID \ = \&NB \ = \&NA \ = \&頁\ = \&CY \ = \&DF \ = \&DS \ = \&MC \ = \&滋\ = \&IA \ = \&IM \ = \&MN \ = \&LK \ = \&TD \ = \&TM \ = \&是\ = \&SH \ = \&SN \ = \&PG \ = \ &PO \ = \&杜\ = \&DT \ = \&DL \ = \&IL \ = \&釐米\ = \&EA \ = \&X1 \ = \&X2 \ = \&X3 \ = \&BP \ = \&BT \ = \&gZipCompress \ = null' –

+0

我在該URL上得到了409衝突。你得到了什麼? –

回答

1

這將涉及一些調試。

能不能請你運行你的腳本:

var cmd = 'wget -O output.csv URL'; 
var child = exec(
    cmd, 
    function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
    } 
); 

這將看到什麼輸出和錯誤說是有趣。

吧,你給我提供你stderr對此表示:

http://productdata.zanox.com/exportservice/v1/rest/22791753C32335607.csv?ticket=BC4B91472561713FD43BA766542E9240AFDD01B95B123E40B2C0375E3A68C142 

該URL的命令行獲取缺少符號(&字符)之後的一切。這表明轉義存在問題。

要解決此問題,請嘗試使用\\\&替換\&

+0

有我們去:http://pastebin.com/tSRC9xKN –

+0

謝謝,答案是,你需要逃避&符。 shell解釋'&'字符意味着將下一部分並行地作爲單獨的語句來運行。嘗試使用'\\\&'而不是'\&'。 –

+1

好電話!我將url包裹在引號中,並修復了它。 –