gpt4 book ai didi

java - 使用 ProcessBuilder 将错误重定向到文件

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

我正在尝试将 GCC 编译器生成的错误消息重定向到文件中在使用 ProcessBuilder 编译 C 程序期间。代码是这样的

ProcessBuilder processBuilder1 = new ProcessBuilder("/usr/bin/gcc",
"-o"+"/home/hipad/hipad/UserProject/example","/home/hipad/hipad/UserProject/example.c
2>/home/hipad/hipad/UserProject/example.gccmessages");

processBuilder1.start();

但这给出了错误。错误是

"/usr/bin/gcc,-o/home/hipad/hipad/UserProject/example,/home/hipad/hipad/UserProj‌​ect/example.c 2>/home/hipad/hipad/UserProject/example.gccmessages": error=2, No such file or directory

有人可以建议一下方法吗?

最佳答案

命令行重定向是您正在使用的 shell(bash、sh、csh 等)提供的一项功能。您的 ProcessBuilder 正在直接启动 gcc,无需使用 shell。因此重定向和管道等 shell 功能不可用。

有两种解决方案。首先,Java 7 版本的 ProcessBuilder 添加了为子进程重定向标准 I/O channel 的功能。如果您使用的是 Java 7,这应该可以工作:

ProcessBuilder pb1 = new ProcessBuilder(
"/usr/bin/gcc",
"-o",
"/home/hipad/hipad/UserProject/example",
"/home/hipad/hipad/UserProject/example.c");
pb1.redirectError(new File("/home/hipad/hipad/UserProject/example.gccmessages"));

如果您没有使用 Java 7 或者不想执行此操作,您可以运行 shell 并让它为您运行 gcc。此方法使您可以完全访问 shell 的命令行解析功能:

ProcessBuilder pb1 = new ProcessBuilder(
"sh",
"-c",
"gcc -o /home/hipad/hipad/UserProject/example /home/hipad/hipad/UserProject/example.c 2> /home/hipad/hipad/UserProject/example.gccmessages");

在这种情况下,最后一个参数可以是您可以在 sh 命令行中键入的任何内容。

关于java - 使用 ProcessBuilder 将错误重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994626/

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