Scala 工具組

如何執行程序?

語言

您可以在單一行中要求整個工具組

//> using toolkit latest

或者,您只需要求 OS-Lib 的特定版本

//> using dep com.lihaoyi::os-lib:0.9.1

在您的 build.sbt 中,您可以新增對工具組的依賴關係

lazy val example = project.in(file("example"))
  .settings(
    scalaVersion := "3.2.2",
    libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
  )

或者,您只需要求 OS-Lib 的特定版本

libraryDependencies += "com.lihaoyi" %% "os-lib" % "0.9.1"

在您的 build.sc 檔案中,您可以新增對工具組的依賴關係

object example extends ScalaModule {
  def scalaVersion = "3.2.2"
  def ivyDeps =
    Agg(
      ivy"org.scala-lang::toolkit:0.1.7"
    )
}

或者,您只需要求 OS-Lib 的特定版本

ivy"com.lihaoyi::os-lib:0.9.1"

啟動外部程序

要設定程序,請使用 os.proc,然後實際啟動它,call()

val path: os.Path = os.pwd / "output.txt"
println(os.exists(path))
// prints: false
val result: os.CommandResult = os.proc("touch", path).call()
println(result.exitCode)
// prints: 0
println(os.exists(path))
// prints: true

請注意,proc 接受字串和 os.Path

讀取程序的輸出

(以下範例中的特定命令可能並非存在於所有機器上。)

在上面我們看到 call() 傳回 os.CommandResult。我們可以使用 out.text() 存取結果的完整輸出,或使用 out.lines() 存取結果的各行。

例如,我們可以使用 bc 為我們進行一些數學運算

val res: os.CommandResult = os.proc("bc", "-e", "2 + 2").call()
val text: String = res.out.text()
println(text.trim.toInt)
// prints: 4

或讓 cal 顯示日曆

val res: os.CommandResult = os.proc("cal", "-h", "2", "2023").call()
res.out.lines().foreach(println)
// prints:
//   February 2023
// Su Mo Tu We Th Fr Sa
//          1  2  3  4
// ...

自訂程序

call() 也會採用各種選用引數,這裡無法逐一說明。例如,您可以設定工作目錄 (cwd = ...)、設定環境變數 (env = ...),或重新導向輸入和輸出 (stdin = ...stdout = ...stderr = ...)。在 OS-Lib 的 README 中尋找有關 call 方法的更多資訊。

此頁面的貢獻者