gpt4 book ai didi

java - 与命令行进程交互

转载 作者:行者123 更新时间:2023-12-01 19:01:06 25 4
gpt4 key购买 nike

我需要与命令行进程交互,例如Windows 上的磁盘部分。问题:以下示例中的 input.readLine() 导致 while 阻塞。

public static void main(String[] args) throws IOException 
{
ProcessBuilder processBuilder = new ProcessBuilder("C:\\Windows\\system32\\diskpart.exe");
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();

input = new BufferedReader(new InputStreamReader(process.getInputStream()));
output = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));

// read #1 code position
String line = null;
while((line = input.readLine())!= null)
System.out.println(line);

// code position #2
System.out.println("This line is never executed");

output.write("list disk" + System.lineSeparator());
output.flush(); // important
}

输出(从读取 #1 代码位置)为

Microsoft DiskPart-Version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
Auf Computer: MYPC

这是正确的,但是之后没有任何反应,例如代码位置#2

System.out.println("This line is never executed"); 

从未达到。谁能告诉我,为什么以及如何解决这个问题?谢谢!

更新:

尝试逐字节读取似乎也不起作用? ):

    InputStreamReader input = new InputStreamReader(process.getInputStream());
int mychar = -1;

while((mychar = input.read()) != -1)
System.out.println(mychar);

System.out.println("This line is never executed");

最佳答案

因为 Diskpart 所做的下一件事是显示提示,其中不包含换行符:

Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: PCNAME

DISKPART> _

所以你的代码坐在那里等待换行符,而换行符永远不会出现。

您需要更改代码以在正确的时间发送“列出磁盘”命令。

关于java - 与命令行进程交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com