2015-09-25 59 views
0

我試圖通過在Node.js的腳本發出以下命令來打開(在這種情況下nano)UNIX文本編輯器:如何從node.js啓動文本編輯器?

if (process.argv[2] === 'edit') { 
    require('child_process').spawn("sudo", ["nano", dbFile], { 
     stdio: 'inherit' 
    }); 
    process.exit(); // try to block here in order not to execute rest of code in this file 
    } 

這開闢了nano,但無論是文本是奇怪,它不別讓我寫任何東西。

+0

確實'(「nano」+ dbFile).split('')'應該是'[「nano」,dbFile]'。 –

+0

你是對的,但他們在這種情況下給出了相同的結果。我會相應地更新問題。 – ceremcem

+0

你可能想看看http://stackoverflow.com/questions/9122282/how-do-i-open-a-terminal-application-from-node-js,這是六,但接受的答案談論你可能會遇到的問題碰上。就像必須從父節點進程捕獲輸入並將流傳輸到您的nano子進程中一樣。 – Sgnl

回答

0

我改變了一下。 data增加了一個關於你產生的過程的事件監聽器。

var dbFile = 'lol.js'; 
var editorSpawn = require('child_process').spawn("nano", [dbFile], { 
    stdio: 'inherit', 
    detached: true 
}); 

editorSpawn.on('data', function(data){ 
    process.stdout.pipe(data); 
}); 

data聽者的內部,process.stdout.pipe是流納米的輸出到所述終端。

添加了我自己的變量並刪除了sudo,因爲它給了我錯誤。你應該可以將它應用到你的代碼中。

0

嘗試使用pty.js

你可能想要把標準輸入到raw mode。通過這種方式,所有關鍵筆劃都將作爲數據事件進行報告。否則,您只能獲得線路(每按一次return鍵)。

process.stdin.setEncoding('utf8'); 
process.stdin.setRawMode(true);  

var pty = require('pty.js'); 

var nano = pty.spawn('nano', [], { 
    name: 'xterm-color', 
    cols: process.stdout.columns, 
    rows: process.stdout.rows, 
    cwd: '.', 
    env: process.env 
}); 

nano.pipe(process.stdout); 
process.stdin.pipe(nano); 

nano.on('close', function() { 
    process.exit(); 
});