我有以下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");
这里有几点建议:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c",
"run.bat", "\"Some Input With Spaces\"",
">>", "stdout.txt","2>>", "stderr.txt");
InputStream stdout = new BufferedInputStream(proc.getInputStream());
FileOutputStream stdoutFile = new FileOutputStream("stdout.txt");
ByteStreams.copy(stdout, stdoutFile);
InputStream stderr = new BufferedInputStream(proc.getErrorStream());
FileOutputStream stderrFile = new FileOutputStream("stderr.txt");
ByteStreams.copy(stderr, stderrFile);
stdout.close();
stderr.close();
stdoutFile.close();
stderrFile.close();
run.bat
将进行重定向的包装器? @echo off
cmd.exe /c run.bat "%1" >> "%2" 2>> "%3"
问题内容: 我在完全冻结JVM的应用程序中发现一个错误。产生的stacktrace将为开发人员提供有价值的信息,我想从Java控制台中检索它。JVM崩溃时,控制台被冻结,我无法再复制包含的文本。 是否可以将Java控制台直接通过管道传输到文件,或通过其他某种方式访问Java应用程序的控制台输出? 更新:我忘记提了,没有更改代码。我是手动测试仪。 更新2:这是在Windows XP下,它实际上是
问题内容: 我想在我的ipython Notebook中运行bash脚本,并将输出另存为python变量中的字符串,以进行进一步操作。基本上,我想将bash magic的输出传递给一个变量,例如,类似这样的输出: 问题答案: 怎么使用这个: 而不是魔术?使用该符号将以下命令作为shell命令运行,结果全部存储在中。要运行多个命令并收集所有命令的输出,只需组合一个快速的shell脚本即可。
了解如何使用“文件”面板在 Dreamweaver 中管理文件和文件夹、在本地和远程站点之间传输和同步它们。此外,还可了解在 Dreamweaver 中自动恢复功能如何运行。 使用 Dreamweaver 中的“文件”面板,您可以访问和管理与您的站点关联的文件。在“文件”面板中,您可以将视图切换为“FTP 视图”或“Git 视图”,进而使用 FTP 服务器或 Git 存储库来管理文件。 要打开“文
问题内容: 本质上,我正在尝试替换: 为了避免使用硬盘驱动器,请在C ++中使用管道。这是我的代码: 我绝对可以确保上述字符串已正确初始化。但是,发生了两件事对我来说没有意义: (1)我正在执行的程序报告“输入文件为空”。由于我未使用“ <”调用程序,因此不应期望输入文件。相反,它应该期待键盘输入。此外,它应该阅读“ gulp_command”中包含的文本。 (2)程序的报告(通过标准输出提供)出
问题内容: 我有一种情况,我需要从Node.js / Express RESTful API返回一个很大的对象,并将其转换为JSON字符串。 但是,这似乎无法很好地扩展。具体来说,它在连接1-2个客户端的测试机上运行良好,但我怀疑当许多客户端同时请求大型JSON对象时,此操作可能会浪费CPU和内存使用率。 我四处寻找一个异步JSON库,但是我发现的唯一一个库似乎有问题(特别是,我收到了[Range
问题内容: 在bash中,调用将在stdout上显示该命令的任何输出。 调用会将该命令的任何输出重定向到指定的文件(在本例中为“输出”)。 有没有一种方法可以将输出重定向到文件 并 在stdout上显示? 问题答案: 您想要的命令名为 : 例如,如果您只关心标准输出: 如果要包括stderr,请执行以下操作: 将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将两