如何在终端进程

时间:2016-02-26 22:34:44

标签: java terminal

我有一个使用Java启动(非Java)CLI流程的流程,我想以编程方式向其发送Ctrl + I组合键。

有可能吗?

3 个答案:

答案 0 :(得分:2)

如果外部进程在其标准输入上寻找Ctrl-I字符(顺便说一下,与Tab相同),GreenGiant的解决方案将起作用。由于这不起作用,该过程显然是在其控制台(tty)上寻找按键,这是其他程序根本无法访问的。您需要编写本机代码来创建虚拟tty并让进程使用它。 JNI是Java允许Java作为Java程序的一部分调用本机代码的方式。

答案 1 :(得分:0)

您无法在不使用GUI的情况下在控制台窗口中发送KeyListener事件。

有关详细信息,请参阅以下内容:

Key Bindings in Command Prompt with Java?

Java key listener in Commandline

答案 2 :(得分: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();