【问题标题】:Issue with Spaces when Scripting Scala with Process使用 Process 编写 Scala 脚本时的空格问题
【发布时间】:2012-07-16 06:57:35
【问题描述】:

我正在尝试编写一个自动化脚本来 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,但似乎都不起作用。

【问题讨论】:

  • 我最近遇到了一个类似的问题,cmdSeq! 不起作用,但 cmdSeq.mkString(" ")! 起作用。从来没有真正弄清楚实际问题出在哪里,很难。不管怎样,试一试。
  • 不,仍然遇到同样的问题:(

标签: string scala scripting process system


【解决方案1】:

你为什么这样做:

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

是分裂论点的原因,而不是Process。你为什么不直接使用下面的?

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

【讨论】:

  • 哇哦,这确实有效。我这样做的原因 replace(" ","\\ ").split(" ") 是因为路径名中有空格(即访问 /my group/..... 这样的路径在 shell 你去/我的组)。我可能太习惯于 shell 脚本,你必须从字面上生成你将在 shell 中执行的确切字符串
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多