gpt4 book ai didi

Scala 在不同的工作目录上运行进程

转载 作者:行者123 更新时间:2023-12-02 00:05:25 25 4
gpt4 key购买 nike

我不能使用 Process("dir/e.exe") 因为 e 需要在它自己的目录上执行,否则它无法访问它的资源。但是每当我尝试更改工作目录时都会收到异常:

Process("e.exe", new File(dir)) 
Process("e.exe", new File("\"+ dir))
Process("e.exe", new File(new File(dir).getCanonicalPath()))

Caused by: java.io.IOException: Cannot run program "e.exe" (in directory ".
\dir"): CreateProcess error=2, The system cannot find the file specified

这些不起作用,它们给了我完全相同的错误。有什么替代方案吗?

编辑:这就是我的目录的外观:
MyFolder:
|-app.jar
|-folderWithExe
\-e.exe

最佳答案

好的,这就是我所拥有的(脏代码,仅用于演示目的)

一、我的目录结构(subdir是子目录):

cdshines@v3700:~/test|⇒  ls -R
.:
log pb.scala subdir

./subdir:
ls

然后我的代码:
import java.lang.ProcessBuilder
import java.io.File

val pb = new ProcessBuilder("ls", "../")
pb.directory(new File("subdir"))
pb.redirectOutput(ProcessBuilder.Redirect.to(new File("log")))
val p = pb.start
p.waitFor
println(p.exitValue)

让我们来看看:
cdshines@v3700:~/test|⇒  scala pb.scala
0
cdshines@v3700:~/test|⇒ cat log
log
pb.scala
subdir

这是您对这段代码的期望吗?对我来说看起来不错。

一般来说:

1) 使用 new ProcessBuilder("application", "arg0", "arg1") 创建 ProcessBulder

2) 通过 "pb.directory(new File("path/to/dir"))" 设置其目录

3) 使用 ProcessProcessBuilder 方法获取输出或退出代码等。

使用 Scala,您可以使用 Source 使其编写速度更快(甚至更脏,但足以玩转):
scala.io.Source.fromInputStream(
new ProcessBuilder("ls", "../")
.directory(new File("subdir"))
.start
.getInputStream).getLines.mkString("\n")

关于Scala 在不同的工作目录上运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com