以编程方式将用户输入命令直接发送到正在运行的进程

问题描述 投票:0回答:1

我有一个通过脚本启动的程序,我开始使用 Processbuilder

ProcessBuilder pb = new ProcessBuilder("Command", "Script");
Process process = pb.start

脚本中的程序加载,然后等待用户输入继续。我尝试创建一个新的 Processbuilder 以使用相同的进程对象发送运行进程特有的命令,但该命令未被识别

pb = new ProcessBuilder("Command");
process = pb.start

我还尝试获取与进程关联的流以获取输出并发送输入

BufferedReader reader = New BufferedReader(new InputStreamReader(process.getInputStream));
BufferedReader writer = New BufferedWriter(new OutputStreamWriter(process.getOutputStream));

while(reader.readLine != null) {
   //output text from program
   //Check for text I know indicates the program is waiting for input
   writer.write(command) 
}

我想查看程序加载的输出,我想查看发送命令后的输出。那么有没有办法启动一个进程,然后抓取该进程的输入/输出流,以便我可以发送命令并获取输出而不需要用户输入?

java process java-stream processbuilder
1个回答
0
投票

使用

ProcessBuilder
启动进程并与其输入/输出流交互似乎走在正确的轨道上。为了实现您正在寻找的目标,您应该使用单独的线程来处理从进程的输出流中读取数据并写入其输入流。 检查下面的代码: 确保将
"Command"
"Script"
替换为适当的值。此代码读取进程的输出,并在满足特定条件时向其发送命令。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class ProcessExample {
    public static void main(String[] args) throws IOException, InterruptedException {
        ProcessBuilder pb = new ProcessBuilder("Command", "Script");
        Process process = pb.start();

        // Read from the process's output stream
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("Output: " + line);
            // Check for the text that indicates the program is waiting for input
            if (line.contains("waiting for input")) {
                // Send a command to the process
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
                writer.write("YourCommandHere\n");
                writer.flush();
            }
        }

        // Wait for the process to finish
        int exitCode = process.waitFor();
        System.out.println("Process exited with code: " + exitCode);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.