2016-02-26 67 views
0

我有一個進程使用Java啓動了一個(非Java)CLI進程,並且我想以編程方式向其發送Ctrl + I組合鍵。如何模仿在終端進程中按下的Ctrl + I

可能嗎?

+0

是的。有可能的。 java鍵綁定應該做的伎倆。 – andrewdleach

+0

@andrewdleach也許我錯過了一些東西,但我不明白這將如何幫助我編程發送Ctrl + I到遠程CLI進程。 –

+0

對不起,我在控制檯上做了些什麼?它是否映射到中斷? – ChiefTwoPencils

回答

2

如果外部進程在其標準輸入中尋找Ctrl-I字符(順便說一句,與Tab相同),GreenGiant的解決方案將起作用。既然這樣做不起作用,那麼這個過程顯然是尋找其控制檯上的按鍵(tty),這是其他程序根本無法訪問的。你需要編寫本地代碼來創建一個虛擬的tty並讓這個過程使用它。 JNI是你如何讓Java調用本地代碼作爲Java程序的一部分。

0

如果您使用ProcessBuilder啓動其他程序,那麼您可能能夠通過發送控制序列將適當的字節寫入進程的輸入流。

我不知道實際的字節序列是什麼,你需要發送,但based on what I'm finding,好像按Ctrl + A爲1,按Ctrl + B爲2,等等

ProcessBuilder pb = new ProcessBuilder("..."); 
Process process = pb.start(); 
OutputStream stream = process.getOutputStream(); 
stream.write('I' - 'A' + 1); // send Ctrl+I 
stream.flush(); 
+0

這看起來很合理,但沒有奏效。 –