【问题标题】:Issuing native system commands in Scala在 Scala 中发出本机系统命令
【发布时间】:2011-03-05 03:31:17
【问题描述】:

我想从 Scala 程序发出本机系统命令,并可能捕获输出。 (想到“ls”。可能有其他方法可以在不发出命令的情况下获取目录信息,但这与我的问题无关。)它将对应于 Python 中的 os.system(...)。

我看过“Scala 编程”。我看过 O'Reilly 的“Programming Scala”。我用谷歌搜索了几种术语组合。还没有运气。有人可以给我一个例子,或者指向我可以找到示例的资源吗?

【问题讨论】:

  • 你不应该标记正确的答案。这将是一件好事,它让未来看到你的问题的人有额外的动力去回答。 :)
  • 完成。谢谢提醒。

标签: scala system command


【解决方案1】:

Scala 在这方面与 Java 没有什么不同,因为您可以使用 Scala 的互操作特性调用任何 Java API 函数。例如,请参阅java.lang.ProcessBuilder

【讨论】:

    【解决方案2】:

    Scala 与 Java 具有完全的互操作性。因此,您可以像从 Java 中一样从 Scala 调用系统命令。请参阅this 了解如何从 Java 调用系统命令。

    【讨论】:

    • 查看其他答案,Scala 的库让事情变得更加方便。
    【解决方案3】:

    最好的方法是使用scala.sys.process

    【讨论】:

    • 匿名用户评论:还要检查scala.sys.process.Process
    • @Anne 谢谢,我已经更新了指向 ScalaDoc 的答案。该包 Process 库,它已进入标准库。
    【解决方案4】:
    import scala.sys.process._
    
    val vimLocation: String = "whereis vim" !!
    

    reference

    【讨论】:

      【解决方案5】:

      您可以使用sys.process 轻松做到这一点:

      执行系统命令并获取其状态码(退出码):

      import sys.process._
      
      val result = "your_command" !
      println("result = "+result) // result contain zero for success or non zero for fail
      

      从系统命令中获取输出:

      import sys.process._
      
      val result = "your_command" !!
      println("result = "+result) // result contain output from the command
      

      您还有其他几个选项(管道、重定向 STDOUT、附加到 STDOUT 和...),您可以看到 this link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-13
        相关资源
        最近更新 更多