gpt4 book ai didi

java - 如何在 Windows 和 JDK 6u45 上将进程输出通过管道传输到文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:46 29 4
gpt4 key购买 nike

我有以下 Windows 批处理文件 (run.bat):

@echo off
echo hello batch file to sysout

以及以下运行批处理文件并将输出重定向到文件的 java 代码:

public static void main(String[] args) throws IOException {
System.out.println("Current java version is: " + System.getProperty("java.version"));

ProcessBuilder pb =
new ProcessBuilder("cmd.exe", "/c",
"run.bat"
,">>", "stdout.txt","2>>", "stderr.txt"
);
System.out.println("Command is: " + pb.command());

Process proc = pb.start();

InputStream in = proc.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}

int exitValue = proc.exitValue();
System.out.println("Exit value: " + exitValue);
}

在包括 JDK6u43 在内的 JDK 上,我得到以下输出:

Current java version is: 1.6.0_29
Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]
Exit value: 0

脚本输出被写入文件。从 JDK 6u45 和 7 开始,我得到以下输出:

Current java version is: 1.6.0_45
Command is: [cmd.exe, /c, run.bat, >>, stdout.txt, 2>>, stderr.txt]
hello batch file to sysout
Exit value: 0

并且没有任何内容写入输出文件。

这可能与 Runtime.exec() 中所做的更改有关,也可能无关,描述于:http://www.oracle.com/technetwork/java/javase/6u45-relnotes-1932876.html

在 Windows 上启动进程并将输出重定向到文件的正确方法是什么?

注意:在真实场景中,要执行的命令可能包含带空格的参数,如:

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c",
"run.bat", "Some Input With Spaces",
">>", "stdout.txt","2>>", "stderr.txt");

最佳答案

这是我在http://tamanmohamed.blogspot.in/2012/06/jdk7-processbuilder-and-how-redirecting.html 上找到的最简单的方法

File output = new File("C:/PBExample/ProcessLog.txt");
ProcessBuilder pb = new ProcessBuilder("cmd");
pb.redirectOutput(output);

关于java - 如何在 Windows 和 JDK 6u45 上将进程输出通过管道传输到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089875/

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