2013-10-30 66 views
7

我需要一個函數來暫停腳本的執行,直到按下一個鍵。 我已經試過:按任意鍵繼續在nodejs中

var stdin = process.openStdin(); 
require('tty').setRawMode(true);  

stdin.on('keypress', function (chunk, key) { 
    process.stdout.write('Get Chunk: ' + chunk + '\n'); 
    if (key && key.ctrl && key.name == 'c') process.exit(); 
}); 

但它只是聽了一按鍵並沒有任何反應。該程序不會繼續執行。

我該如何暫停執行?

+0

你有循環中的這個功能嗎?此外,你只是試圖暫停同步功能或異步功能? – EmptyArsenal

+1

您不能暫停在後臺運行的腳本的執行。但我不認爲這是重點,你需要暫停process.stdin/stdout。你可以看看[readline](http://nodejs.org/api/readline.html)包。 – user568109

回答

11

工作對我來說:

console.log('Press any key to exit'); 

process.stdin.setRawMode(true); 
process.stdin.resume(); 
process.stdin.on('data', process.exit.bind(process, 0)); 
+1

這對我來說也有效,但我與你的代碼之前的setTimeout和循環它仍然執行與寫作「按任意鍵退出」後自稱的方法循環... – Aebsubis

+0

您可以發佈您的問題用一些代碼?我很樂意回答它,如果我可以 – vkurchatkin

+10

這不是問題的解決方案,它會在按鍵上殺死程序,問題是暫停然後繼續按鍵。 –

0

我實際上是由被稱爲paktc的NPM包,將幫助您與此有關。如果你安裝的軟件包:

> npm install paktc 

然後你會使用這樣的:

// your console application code here... 

require('paktc') // Press any key to continue... 
+0

它不適用於我 – hellboy

+0

哪一部分?你是否收到錯誤信息或任何東西?你能更具體什麼不工作?你可以在這裏提交錯誤: https://github.com/justinmchase/paktc/issues –

+0

這是'WebStrom'控制檯問題 – hellboy

2

接受的解決方案異步等待關鍵事件,然後退出,這是不是一個真正的解決方案,以「新聞任何鑰匙繼續「。

我在編寫一些nodejs shell腳本時需要暫停。我最終使用shell命令「read」的child_process的spawnSync。

這將基本上暫停腳本,當你按Enter鍵時,它將繼續。很像在Windows中的暫停命令。

require('child_process').spawnSync("read _ ", {shell: true, stdio: [0, 1, 2]}); 

希望這會有所幫助。

1

這個片段做,如果你不想退出過程中的工作:

console.log('Press any key to continue.'); 
process.stdin.once('data', function() { 
    continueDoingStuff(); 
}); 

這是異步,如果你正在使用節點7你可以這樣不會內環路,is--工作將其包裝在承諾中並使用async/await