是否可以将输出流重定向回进程,或者根本不重定向?
背景故事: 我正在尝试使用 processbuilder 启动可执行文件。 (源专用服务器/确切地说是srcds.exe)
作为使用 processbuilder 启动它的结果,这个可执行文件的控制台窗口仍然是空的。启动几秒钟后,可执行文件崩溃并显示错误“CTextConsoleWin32::GetLine: !GetNumberOfConsoleInputEvents”,因为它的控制台是空的。
最佳答案
我认为您是在谈论使已启动进程的标准输出转到当前进程的标准输出。如果您使用的是 JDK7,那就很简单:
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
更新:(评论太多了)我觉得你很困惑。当您从终端启动进程时,该进程成为该终端进程的子进程,并且标准输出被发送到该终端。当您从 Java 启动一个进程时,该进程是 Java 进程的子进程,并且它的标准输出转到 Java。
在第一种情况下,有一个显示标准输出的终端,因为您自己从终端启动了它,这就是终端对标准输出所做的事情。然而,当从 Java 启动时,不会有终端窗口,除非您启动的进程中的某些东西打开了终端,并且您启动的进程的标准输出被交还给您,程序员,您可以随意处理。与您从终端启动时看到的等效行为是我已经提到的 Redirect.INHERIT
。
您现在的问题不是 Java。您的问题是不了解此“srcds.exe”期望如何处理 stdin 和 stdout。解决这个问题,然后回过头来询问如何使用 Java 做到这一点。
我现在只是在猜测,但您可以尝试从进程的标准输出中读取并将其反馈到标准输入中。也许这就是它所期待的?不过,这听起来很疯狂。
关于java - Processbuilder 无需重定向 StdOut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10791091/