回答
如果你想要做的只是打開另一個終端,你可以簡單地產生一個新的終端進程。您的特定Linux發行版使用哪個終端將需要弄清楚,但出於回答的目的,我將使用xterm。您可以通過以下命令產卵過程:
var spawn = require('child_process').spawn;
var oTerminalProcess = spawn("xterm", []);
現在你會彈出打開另一個終端應該給你訪問做任何你需要做的。您可以稍後在關閉過程中使用以下命令:
oTerminalProcess.kill();
你可能會想用產卵,而不是高管,因爲Exec將有子進程後輸出緩衝區溢出問題> 200 KB(http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback)
當然,所有這些都假定某種GUI桌面類型的環境。如果您想在GUI未運行時從單個控制檯執行此操作,那將會是一個完全不同的問題。
如果這是你想做的事,你將不得不附加事件偵聽器來處理標準輸入(http://nodejs.org/api/process.html#process_process_stdin),並直接推到標準輸出,並使用EXEC仿效自己的終端是什麼。這不是非常困難,但我可以想象,細節可能會因特殊情況而變得多毛。它可能看起來像這樣(我在節點0.8.21測試,這是爲我工作):
var exec= require('child_process').exec;
process.stdin.resume();
process.stdin.setEncoding('utf8');
var sInputBuffer = "";
process.stdout.write("$Prompt: ");
process.stdin.on('data', function(chunk) {
sInputBuffer += chunk;
if(chunk === "quit\n")
{ process.stdin.pause();
}
else
{
exec(sInputBuffer, function(error, stdout, stderr){
if(stdout.length > 0)
{ process.stdout.write(stdout); }
else
{ process.stdout.write(stderr); }
sInputBuffer = "";
process.stdout.write("\n$Prompt:");
});
}
});
注意我有它設置爲「跳槽」查殺程序或在您的情況查殺標準輸入流接受輸入。你必須克服的一個問題可能是攔截ctrl-c命令。現在它殺死了整個節點,但是你可能希望它只是簡單地殺掉正在執行的命令。這肯定會有更多的工作,但沒有什麼是你無法克服的。
無論如何,這應該會給你一些選擇。希望這可以幫助。
看起來不錯,(我正在使用後一種情況,沒有涉及GUI)。我想知道如果我只是將子進程傳遞到當前節點進程中,並且我同意這是一個非常好管理的解決方案。感謝您向我展示您的方式,並指出exec vs spawn的警告! – DanF
我注意到在你的第二個例子中,你使用exec代替了spawn,在你指出exec的200kb最大輸出之後。產卵可以用於相同的效果,但沒有輸出限制? – DanF
編寫第二個例子時我的假設是單個控制檯命令不會溢出200 kB緩衝區。不過,我想你不一定要依靠那個。但你絕對可以使用產卵並解決這個限制。知道何時以這種方式再次輸出提示以獲得更多用戶輸入會更困難。 。 。 – Brian
- 1. 如何在Python中退出程序時打開另一個程序?
- 2. 打開終端進程退出後,不能接入終端再次
- 3. 如何從node.js打開終端應用程序?
- 4. 打開新的終端,SSH遠程主機並運行一個程序來遠程host.All輸出要在新打開終端
- 5. 打開終端時出錯
- 6. 如何關閉表單,退出所有過程並打開另一個表單
- 7. TCL - 打開一個新終端,在已打開的終端上執行一些操作並關閉它
- 8. 從另一個程序中打開一個應用程序
- 9. 摺疊一個div並打開另一個引導程序
- 10. 打開終端
- 11. 在第二個終端配對後的PiTooth.py程序中,另一個終端的程序仍在「等待連接」
- 12. 從另一箇中打開另一個JavaFX應用程序?
- 13. 如果不退出ssh_tunnel,請打開新的終端
- 14. python 3打開終端並運行程序
- 15. 從終端打開一個matlab gui
- 16. 如何從終端打開一個URL
- 17. SharedPreferences除非第一個應用程序退出並重新打開
- 18. 打開另一個終端顯示信息
- 19. Node.js process.exit()不會退出,並且createReadStream打開
- 20. 當另一個終端窗口打開時創建兩個進程?
- 21. 打開與另一個程序
- 22. 打開一個進程,獲取輸出,然後打開另一個進程並獲得輸出
- 23. 在git終端中退出bash
- 24. 如何在終端中退出命令
- 25. Link tap打開Android瀏覽器並退出應用程序
- 26. 如何在java中打開終端窗口並執行客戶程序
- 27. Mac終端進程完成退出
- 28. 無法打開在終端
- 29. 打開終端/提示並通過一個命令(ping)
- 30. 在另一個應用程序中打開一個Android應用程序
您的運行node.js進程不知道「命令行」是什麼。它運行在cpu上,並將其stdout和stderr數據發送到「Somewhere」,通過命令行界面調用它意味着命令行界面。你能否解釋爲什麼你需要這樣做,以便我們明白你想要達到的目標,而不是你認爲你應該達到的目標? –
我想製作一個Node程序,它將成爲一個非常簡單的Linux機器的啓動界面,以展現一些非常簡單的功能。有人告訴我,編輯/ etc/inittab是改變計算機啓動的方式,但我想包括一個選項,用於從該提示中打開一個普通的BASH shell,以便有時展示全部功能。 – DanF
不確定從執行的角度來看是否有意義。你可以讓它產生一個進程,但是它會被節點進程「擁有」,所以如果這個進程死了,你的產生進程就會隨之死亡。將節點作爲啓動界面運行的想法聽起來很奇怪,但後來我沒有所有的細節。 –