【问题标题】:Java/Kotlin run Runtime.getRuntime().exec() with visible command promptJava/Kotlin 使用可见的命令提示符运行 Runtime.getRuntime().exec()
【发布时间】:2023-08-10 04:29:01
【问题描述】:

在我的 Windows 系统上,我想使用 Runtime.getRuntime().exec(command) 启动一个带有 python 脚本的子进程,并打开命令提示符终端,以便用户可以看到该进程正在运行。我的命令是这样的:

val command = "cmd /c python ~path_to_file~ ~args~"

我知道有另一种方法可以通过以下方式将命令提示符的内容打印回原始终端:

import java.util.Scanner
fun main(args: Array<String>) {
    val proc = Runtime.getRuntime().exec("cmd /C dir") 
    Scanner(proc.inputStream).use {
        while (it.hasNextLine()) println(it.nextLine())
    }
}

只是想知道是否还有其他我还没有看到的选项。

【问题讨论】:

    标签: java kotlin runtime.exec


    【解决方案1】:

    我认为你应该使用ProcessBuilder的重定向:

    fun main() {
        ProcessBuilder("cmd", "/C", "dir")
            .redirectOutput(ProcessBuilder.Redirect.INHERIT)
            .start()
            .waitFor()
    }
    
    

    此示例与您的行为相同。

    【讨论】:

    • 感谢您的回答。我可以复制与上述相同的行为,但没有显示输出的可见命令提示符/终端。我可以重新定向,但有没有办法强制打开终端?
    • @PeptideWitch 是的。尝试用cmd /C start dir替换cmd /C dir
    • 这对我有用,Windows 10 kotlin ProcessBuilder("cmd /C start dir".split(" ")) .redirectOutput(ProcessBuilder.Redirect.INHERIT) .start() .waitFor()
    最近更新 更多