从Java程序执行重影脚本时出错

从Java程序执行重影脚本时出错,java,ghostscript,Java,Ghostscript,我正在JUnit测试中执行一个ghostscript命令,测试结束时出错。然而,当我在终端中执行相同的命令时,命令没有错误地完成 Command: /usr/local/bin/gs -sOutputFile="OUTPUT_PATH" -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "INPUT_

我正在JUnit测试中执行一个ghostscript命令,测试结束时出错。然而,当我在终端中执行相同的命令时,命令没有错误地完成

Command: /usr/local/bin/gs -sOutputFile="OUTPUT_PATH" -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "INPUT_PATH"
我使用java运行时执行该命令

Process pr = Runtime.getRuntime().exec(command);

int exitValue = pr.waitFor();

if (exitValue != 0) {
   ....
}
执行中的错误

GPL Ghostscript 9.21: **** Could not open the file "OUTPUT_PATH" .

该问题是由生成命令时输出路径的双引号引起的。

显然,区别在于环境,而不是GS。我猜想,当您从Java执行命令时,当前的工作目录是不可写的(或者至少对于当前用户是不可写的)。这意味着Ghostscript无法打开输出文件进行写入。尝试指定一个完整的路径,并将文件输出到一个目录中,在这个目录中,您可以确定Java是可以写入的。另一种可能性是,该文件已经存在并由另一个应用程序打开。再次向不同的(完全限定的)位置写入应该可以防止这种情况,只要你小心。谢谢@KenS,我在JUnit测试中使用了文件的完整路径。例如,我使用eclipse上的目标文件夹来编写文件<代码>路径.get(“target”,“GRAYSCALE_TEST.pdf”)在我看来,这仍然是一个环境问题。请注意,我对Java一无所知,所以您的Eclipse行没有告诉我任何我担心的事情。很明显,Ghostscript正在工作(因为它在shell中工作)。区别一定在于它周围的环境。错误很明显;Ghostscript无法打开该文件。有两个可能的原因,第一个是使用“wb”的C运行时fopen()失败,第二个是输出到文件以外的其他文件(例如%stdout%”)这是失败的。出于这个原因,最好是完整地引用实际路径,这样我就可以知道了。引用完整的后台通道成绩单可能也会有帮助,看到它肯定很有用。感谢所有@KenS,我在Java调用中发现了问题。我在文件路径中添加了双引号,以避免出现空格问题。我发现了解决方案阅读此问题的答案: