2013-01-08 131 views
1

我正在研究一個Node.js CLI腳本,作爲其職責的一部分,有時需要從用戶處獲取大塊輸入文本。現在,我只使用非常基本的readline.prompt()。我想要一些更好的編輯功能。我想我可以像crontab -evisudo那樣做,並讓腳本啓動一個文本編輯器,將數據寫入臨時文件,並在文件退出後從該文件讀取。我已經嘗試了一些來自child_process庫的東西,但它們都在後臺啓動應用程序,並且不要讓它們控制stdin或光標。就我而言,我需要像vim或nano這樣的應用程序在運行時佔用整個控制檯。有沒有辦法做到這一點,或者我運氣不好?從node.js在前臺執行shell命令

注意:這是一個內部項目,將運行在一臺機器上,其源可能永遠不會看到白天。我們歡迎黑客解決方法,假設沒有現成的軟件包來執行我所需要的操作。

回答

3

您是否將child_process.spawn的stdio選項設置爲繼承?

這樣,子進程將使用與頂級節點進程相同的stdin和stdout。

此代碼對我的作品(節點V4.3.2):

'use strict'; 

var fs = require('fs'); 
var child_process = require('child_process'); 
var file = '/tmp/node-editor-test'; 

fs.writeFile(file, "Node Editor", function() { 
    var child = child_process.spawn('vim', [file], {stdio: 'inherit'}); 

    child.on('close', function() { 
    fs.readFile(file, 'utf8', function (err, text) { 
     console.log('File content is now', text); 
    }); 
    }); 
});