你可以在一行中要求整个工具包
//> 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
方法的更多信息。
此页面的贡献者
内容
- 简介
- 使用 MUnit 进行测试
- 如何编写测试?
- 如何运行测试?
- 如何运行单个测试?
- 如何测试异常?
- 如何编写异步测试?
- 如何管理测试的资源?
- MUnit 还能做什么?
- 使用 OS-Lib 处理文件和进程
- 如何读取目录?
- 如何读取文件?
- 如何写入文件?
- 如何运行进程?
- OS-Lib 还能做什么?
- 使用 uPickle 处理 JSON
- 如何在 JSON 中访问值?
- 如何修改 JSON?
- 如何将 JSON 反序列化为对象?
- 如何将对象序列化为 JSON?
- 如何读写 JSON 文件?
- uPickle 还能做什么?
- 使用 sttp 发送 HTTP 请求
- 如何发送请求?
- 如何构建 URI 和查询参数?
- 如何发送带正文的请求?
- 如何发送和接收 JSON?
- 如何通过 HTTP 上传文件?
- sttp 还能做什么?