是否可以将输出流重定向回进程,或者根本不重定向?
背景故事:
我正在尝试使用 processbuilder 启动可执行文件。
(确切地说是源专用服务器/srcds.exe)
使用 processbuilder 启动它的结果是,该可执行文件的控制台窗口保持为空。启动几秒钟后,可执行文件崩溃并出现错误“CTextConsoleWin32::GetLine: !GetNumberOfConsoleInputEvents”,因为其控制台为空。
我认为您正在谈论使启动的进程的标准输出转到当前进程的标准输出。如果您使用 JDK7,则很简单:
.redirectOutput(ProcessBuilder.Redirect.INHERIT)
Update:(太多评论了)我认为你很困惑。当您从终端启动进程时,该进程将成为该终端进程的子进程,并且 stdout 将发送到该终端。当您从 Java 启动进程时,该进程是 Java 进程的子进程,其标准输出将转到 Java。
在第一种情况下,有一个终端显示标准输出,因为您自己从终端启动了它,这就是终端对标准输出所做的事情。然而,当从 Java 启动时,不会有终端窗口,除非您启动的进程中的某些内容打开了终端,并且您启动的进程的标准输出将返回给您(程序员),让您按照您的意愿进行处理。与从终端启动时看到的行为等效的是Redirect.INHERIT
我已经提到过。
你现在的问题不是Java。您的问题是不理解这个“srcds.exe”期望如何处理标准输入和标准输出。弄清楚这一点,然后回来询问如何用 Java 做到这一点。
我现在只是猜测,但您可以尝试从进程的标准输出中读取并将其反馈到标准输入中。也许这就是它所期待的?不过,这听起来很疯狂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)