1

我正在尝试编写一个自动化脚本来 pngcrush 我的图像(对于我正在开发的网站),并且我使用 scala 作为脚本语言来编写脚本来执行此操作。一切都很顺利,除了我在执行命令时遇到了关于使用空格的问题。我读到你需要使用

Seq(a,b,c,d)

其中 a,b,c,d 是字符串(用单个空格分隔),用于处理 Scala/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

这是正确的命令应该是什么(在终端中手动运行字符串可以正常工作)。但是,当我尝试通过 Scala 脚本运行它时,我得到了这个

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,但似乎都不起作用。

4

1 回答 1

0

你为什么做这个:

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

就是分裂论点的原因,而不是Process。你为什么不只使用以下内容?

val string = Seq("pngcrush",
                 "brute",
                 "-d","\"" + folder.getPath + "/\"",
                 "-e",fileName.getName, 
                 fileName.getCanonicalPath)
于 2012-07-17T17:10:19.323 回答