我正在尝试将 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/UserProject/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/