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

时间:2014-01-08 11:40:43

标签: java redirect stderr processbuilder

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

有人可以建议这样做吗?

1 个答案:

答案 0 :(得分:1)

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

有两种解决方案。首先,{7}的Java 7版本添加了重定向子进程的标准I / O通道的函数。如果您使用的是Java 7,则应该可以使用:

ProcessBuilder

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

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"));

在这种情况下,最终参数可以是您可以在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"); 命令行键入的任何内容。