gpt4 book ai didi

java - Scala - 在特定场景下无法通过终端执行进程

转载 作者:行者123 更新时间:2023-11-29 05:51:06 27 4
gpt4 key购买 nike

我正在使用 graphviz 根据在 scala 程序中传递的消息生成图表。为了从 scala 程序内部调用 graphviz 应用程序,我使用了 exec() 方法(类似于 Java)。当我使用以下代码片段时,它成功执行了命令并创建了图形:

var cmd: String = "dot -Tpng Graph.dot -o Graph.png"  
var run: Runtime = Runtime.getRuntime() ;
var pr: Process = run.exec(cmd) ;

但是在更改输入和输出文件的路径后它无法执行(我只是包含了一个目录,输入文件和输出文件所在的目录如下所示)

  def main(args: Array[String]): Unit = {

var DirectoryName: String = "Logs"

var GraphFileName: String = DirectoryName + File.separator + "Graph.dot"
val GraphFileObj: File = new File(GraphFileName)

// var cmd: String = "dot -Tpng Graph.dot -o Graph.png"
var cmd: String = "dot -Tpng \"" + GraphFileObj.getAbsolutePath + "\" -o \"" + DirectoryName + File.separator + "Graph.png\"" ;
println(cmd)

var run: Runtime = Runtime.getRuntime() ;
var pr: Process = run.exec(cmd) ;

}

通过终端执行相同的命令会给出正确的输出。你能帮我找到我丢失的东西吗?

最佳答案

exec 不是 shell...例如引用不会像您期望的那样工作,因此您的路径(可能包含空格等)将不会像您期望的那样被处理。该命令将使用 StringTokenizer 分解,您的文字引号将是......好吧......文字。

改用采用数组的 exec 形式,这样您就可以正确标记命令。

val args = Array[String]("dot", "-Tpng", GraphFileObj.getAbsolutePath, ...);
run.exec(args)

关于java - Scala - 在特定场景下无法通过终端执行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13815404/

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