【问题标题】:Executing unzip command programmatically以编程方式执行解压缩命令
【发布时间】:2015-12-04 12:10:14
【问题描述】:

我创建了一个 shell 脚本,其中有一个简单的语句 unzip -o $1,在通过终端运行并将 .zip 文件作为参数传递时,它工作正常,需要 5 秒来创建解压缩文件夹。现在我尝试在 scala 中做同样的事情,我的代码如下:

object ZipExt extends App {

  val process = Runtime.getRuntime.exec(Array[String]("/home/administrator/test.sh", "/home/administrator/MyZipFile_0.8.6.3.zip"))
  process.waitFor

  println("done")
}

现在,每当我尝试执行 ZipExt 时,它都会永远卡在 process.waitFor 中,并且未达到 print 语句。我已尝试在本地和服务器上使用此代码。我尝试了其他可能性,例如在 shellscript 中创建局部变量,包括 shell 脚本中的退出语句,尝试解压缩除地雷之外的其他 .zip,甚至有时正在执行 print 语句但没有创建解压缩文件。所以我很确定以编程方式执行unzip 命令来解压缩文件有什么问题,或者还有其他方法可以以编程方式解压缩压缩文件。我已经被这个问题困扰了2天,所以有人请帮忙..

【问题讨论】:

    标签: linux scala zip


    【解决方案1】:

    您提供给我们的信息似乎不足以重现问题:

    % mkdir 34088099
    % cd 34088099 
    % mkdir junk
    % touch junk/a junk/b junk/c
    % zip -r junk.zip junk
    updating: junk/ (stored 0%)
      adding: junk/a (stored 0%)
      adding: junk/b (stored 0%)
      adding: junk/c (stored 0%)
    % rm -r junk
    % echo 'unzip -o $1' > test.sh
    % chmod +x test.sh
    % scala
    Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_66).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> val process = Runtime.getRuntime.exec(Array[String]("./test.sh", "junk.zip"))
    process: Process = java.lang.UNIXProcess@35432107
    
    scala> process.waitFor
    res0: Int = 0
    
    scala> :quit
    % ls junk 
    a  b  c
    

    我建议在您自己的机器上尝试相同的复制。如果它对你也成功,那么开始系统地减少成功案例和失败案例之间的差异,一次一步。这将有助于缩小可能的原因。

    【讨论】:

    • 对不起,我是AFK,会尽快尝试
    • 出了什么问题?
    • no 而不是使用unzip inside shell 命令我现在以编程方式解压缩了.zip 文件
    • 大声笑@Seth Tisue,看看这个stackoverflow.com/questions/30640627/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2016-10-28
    相关资源
    最近更新 更多