使用进程编写Scala脚本时的Spaces问题

时间:2012-07-17 10:57:30

标签: string scala scripting process system

我正在尝试编写一个自动脚本来压缩我的图像(对于我正在处理的网站),我使用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,两者似乎都不起作用。

1 个答案:

答案 0 :(得分:0)

你为什么这样做:

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

正在分裂论点,而不是Process。你为什么不只使用以下内容?

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