2017-03-21 79 views
1

如果您不熟悉icecast,它是一個多媒體服務器。gulp-exec子進程立即關閉

當我在終端中運行icecast -c ./icecast/icecast.xml時,它會啓動一個保持活動狀態的icecast服務器。

所以我想在我的node.js進程旁邊運行該命令,每次運行gulp

我將以下內容添加到我的gulp文件中。

import exec from 'gulp-exec' 

... 

const icecastDir = path.resolve(`${__dirname}/icecast/`) 

... 

gulp.task(`icecast`,() => { 
    return exec(`/usr/local/bin/icecast -c ${icecastDir}/icecast.xml`) 
    .on(`data`,() => { 
     console.log(`data`) 
    }) 
    .on(`error`,() => { 
     console.log(`error`) 
    }) 
    .on(`end`,() => { 
     console.log(`end`) 
    }) 
    .on(`close`,() => { 
     console.log(`error`) 
    }) 
    .on(`readable`,() => { 
     console.log(`readable`) 
    }) 
}) 

當我在終端運行命令gulp icecast,一飲而盡說Starting 'icecast'...,然後立即終止。沒有一個回調火。我真的很喜歡它,直到我cmd-c吞噬過程。

我覺得我錯過了一些關於吞嚥如何工作的基本知識,但是在吞嚥(或吞嚥-exec)文檔中我找不到任何提及此類主題的任何內容。

回答

0

我有一個非常類似的問題,並注意到其警告,如果你只是想運行一個命令,你應該使用節點的child_process.execgulp-exec page has a note

運行exec(command)立即退出該過程;然而,當我試圖在一飲而盡,Exec的頁面中指定的語法,其中包括一個回調:

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

gulp.task('task', function (cb) { 
    exec('ping localhost', function (err, stdout, stderr) { 
    console.log(stdout); 
    console.log(stderr); 
    cb(err); 
    }); 
}) 

現在保存過程活着。我並不需要輸出和錯誤輸出,所以設法逃脫:

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

gulp.task('task', function (cb) { 
    exec('ping localhost', function (e) { cb(e); }); 
}) 

我不是在節點精通,公正地分享對我工作;我希望這個解決方案解決您的問題。