簡體   English   中英

使用ProcessBuilder將錯誤重定向到文件

[英]Redirection of error into a file using ProcessBuilder

我試圖在使用ProcessBuilder編譯C程序期間將GCC編譯器產生的錯誤消息重定向到文件中。 代碼是這樣的

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 因此,外殼功能(如重定向和管道)不可用。

有兩種解決方案。 首先,Java 7版本的ProcessBuilder添加了一些功能來重定向子進程的標准I / O通道。 如果您使用的是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或不使用wnat來執行此操作,則可以運行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命令行中鍵入的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM