2012-06-01 102 views
0

我正在試圖使用child_process將lftp程序包裝到node.js應用程序中。問題是lftp不會將其輸出寫入stdout,所以我無法在node.js中捕獲它的輸出。示例代碼:使lftp寫入標準輸出而不必先關閉進程

var proc = require('child_process').spawn('lftp', ['-p', port, '-u', username + ',' + password, host]); 

proc.stdout.on('data', function (data) { 
    console.log('stdout:', data.toString('utf-8')); 
}); 

proc.on('exit', function (code) { 
    console.log('process exited with code ' + code); 
}); 

proc.stdin.write('ls'); 
// proc.stdin.end(); 

如果我取消調用stdin.end()爲lftp的子進程的線,從ls命令的輸出出現在我的終端,因爲它應該。如果我不這樣做,這個過程簡單地掛起來,什麼都不會輸出。

我也試過使用unbuffer,但它似乎不允許我寫入lftp的stdin了。它輸出通常的「[解析主機地址...]」東西,但不是來自ls命令的輸出。

我的問題是:爲了能夠使用node.js的child_process與lftp進行交互,我需要做些什麼?

+0

你爲什麼試圖與交互式FTP客戶端接口? http://npmjs.org列出了幾個用於節點的FTP模塊。 – lanzz

+0

他們都不支持通過顯式TTL/SSL,SFTP等FTP。我認爲使用child_process包裝現有的FTP客戶端可能更容易。 –

回答

0

嗯,這是愚蠢的。在ls命令之後,我忘了寫一個換行符到stdin。它似乎沒有需要不緩衝的工作。

相關問題