2012-11-15 104 views
0

我在從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(); 

但是這給了同樣的錯誤。據我所知,我正在做其他類似問題的建議,但沒有任何工作。任何想法,將不勝感激!

回答

1

你不需要"\"" + _fileName + "\""附近的報價,只是一個普通的_fileName會在這裏工作。當您提供一個數組來Runtime.exec(或ProcessBuilder)你已經分割你的命令成「言」 - 如果你增加你告訴它來尋找其名稱的文件的報價實際上是雙引號+ _fileName +雙引號而不僅僅是_fileName

真正的問題可能在於_batchName程序,該程序大概是一個通過調用其他程序來執行實際工作的shell腳本。在該腳本您將收到mac-ffmpegframe%d.jpg_fileName論據$1$2$3,你需要確保他們正確的腳本,例如內引用如果腳本目前說像

processFile $3 

,那麼你需要去改變它說

processFile "$3" 

如果是應付包含空格的文件名。或者,如果它被設置在一次處理多個文件:

processFiles $* 

,那麼你需要更換與

processFiles "[email protected]" 
+0

這是偉大的,謝謝!在腳本中使用引號本身已經成功了。是什麼把我這裏的是,當我試圖運行腳本,並從終端傳遞的參數(帶雙引號),它工作得很好,所以我本以爲這個問題與Java代碼,而不是腳本所在。 – aritchie

相關問題