2012-07-17 71 views
1

我正在嘗試編寫一個自動腳本來pngcrush我的圖像(對於我正在處理的網站),並且我使用scala作爲腳本語言來編寫腳本來執行此操作。一切都很順利,除了在執行命令時使用空格時遇到問題。我讀了你需要使用使用進程腳本編寫Scala時出現問題

Seq(a,b,c,d) 

,其中A,B,C,d是字符串(被認爲由單個空格隔開)來處理如何斯卡拉/ Java的處理字符串

的我用於生成要執行的命令的相關代碼就在這裏。結果變量包含文字路徑的每一個文件名

for (fileName <- result) { 
    val string = Seq("pngcrush","brute","-d","\"" + folder.getPath + "/\"","-e",fileName.getName) ++ fileName.getCanonicalPath.replace(" ","\\ ").split(" ").toSeq 

然後我用

string! 

要執行的命令。問題在於命令的最後一部分(在「-e」標誌之後)的文件名沒有正確執行,因爲它無法處理具有空格的目錄。一個示例輸出如下所示

List(pngcrush, brute, -d, "/tmp/d75f7d89-9ed5-4ff9-9181-41ae2fd82da8/", -e, users_off.png, /Users/mdedetrich/3dot/blublocks/src/main/webapp/img/sidebar/my\, group/users_off.png) 

如果我運行reduceLeft來獲取空格,我顯然會得到正確的字符串。

pngcrush brute -d "/tmp/1eaca157-0e14-430c-b0a4-677491d70583/" -e users_off.png /Users/mdedetrich/3dot/blublocks/src/main/webapp/img/sidebar/my\ group/users_off.png 

這是正確的命令應該是什麼(在終端中手動運行字符串工作正常)。然而,當我試圖通過斯卡拉腳本來運行它,我得到這個

Could not find file: users_off.png 
Could not find file: /Users/mdedetrich/3dot/blublocks/src/main/webapp/img/sidebar/my\ 
Could not find file: group/users_off.png 
    CPU time decoding 0.000, encoding 0.000, other 0.000, total 0.000 seconds 

任何想法,我在做什麼錯誤?這似乎是一個Scala不解析有空格的字符串的問題(並且Seq也不工作)。我已經嘗試使用空格和Seq的文字字符串,這兩者似乎都不起作用。

+0

最近我有一個類似的問題,其中''cmdSeq!''沒有工作,但'cmdSeq.mkString(「」)!''沒有。從來沒有真正弄清楚實際問題的嚴重性。無論如何,試試吧。 – 2012-07-17 11:16:51

+0

不,仍然得到了同樣的問題:( – mdedetrich 2012-07-17 14:35:23

回答

0

你爲什麼這樣做:

replace(" ","\\ ").split(" ") 

是什麼分裂的說法,不Process。你爲什麼不使用以下內容?

val string = Seq("pngcrush", 
       "brute", 
       "-d","\"" + folder.getPath + "/\"", 
       "-e",fileName.getName, 
       fileName.getCanonicalPath) 
+0

哇哦,實際的工作。我之所以這樣做 \t \t代替(「‘’\\‘).split(’」) \t 當時的路徑名那裏面有空格(例如,訪問像/我的組/ /在shell中的路徑,你去/我的\組)。我可能太習慣於shell腳本,你必須從字面上產生確切的字符串,你將在shell中執行 – mdedetrich 2012-07-18 00:34:57