我在从OS X 10.8上的Java应用程序运行外部脚本时遇到了实际问题。它适用于Windows,所以不知道我在做什么错的OS X.在OS X上从Java应用程序运行外部脚本
什么工作(Windows)中:
String[] commands = {
"\"" + _appDataDir + "\\Temp\\Workers\\" + _batchName + "\"",
"\"" + _appDataDir + "\\Temp\\frame%d.jpg\"",
"\"" + _fileName + "\""};
proc = rt.exec(commands);
所以我一直在为OS X下:
String[] commands = {
_appDataDir + "/Temp/Workers/" + _batchName,
_appDataDir + "/Temp/Workers/mac-ffmpeg",
_appDataDir + "/Temp/frame%d.jpg",
"\"" + _fileName + "\""};
proc = rt.exec(commands);
这适用于文件名中没有空格的情况,但当存在具有“java.io.IOException:错误文件描述符”错误的空格时失败。
目前,我已经改变了所有的路径有没有空格作为一个简单的办法,但因为这是由用户从一个保存对话框中选择了我没有在文件名字符串控制。我已经尝试过在文件名周围没有双引号但没有任何区别。
我也试过的ProcessBuilder如下(包括有和没有 “/斌/庆典/,-c” 位):
ProcessBuilder proc2 = new ProcessBuilder(
"/bin/bash",
"-c",
_appDataDir + "/Temp/Workers/" + _batchName,
_appDataDir + "/Temp/Workers/mac-ffmpeg",
_appDataDir + "/Temp/frame%d.jpg",
"\"" + _fileName + "\""
);
proc = proc2.start();
但是这给了同样的错误。据我所知,我正在做其他类似问题的建议,但没有任何工作。任何想法,将不胜感激!
这是伟大的,谢谢!在脚本中使用引号本身已经成功了。是什么把我这里的是,当我试图运行脚本,并从终端传递的参数(带双引号),它工作得很好,所以我本以为这个问题与Java代码,而不是脚本所在。 – aritchie