gpt4 book ai didi

java - 如何从另一个 jar 运行一个 jar 并在执行期间显示第一个可运行的控制台输出

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

我正在运行另一个 jar 中的 jar 文件,例如 here somebody answers但正在等待过程。

Process proc = Runtime.getRuntime().exec("java -jar A.jar" + stringParams);

try {
proc.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}

InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();

当我对所调用的程序的状态没有反馈时,我的问题就出现了,但我不希望我的程序继续超出这些行。我需要标准输出和错误输出,但结果会在执行结束时显示。有什么方法可以在 jar 仍在运行时执行和获取这些流吗?

最佳答案

缓冲/无缓冲

这似乎是缓冲输出的问题。

执行的进程(在本例中为 java -jar <path> )缓冲输出并仅在完成时写入(在大块中,我们不喜欢这样!)

因此,一种方法是通过无缓冲执行进程(非常hacky工具):

  • unbuffered <command>
  • stdbuf -i0 -o0 -e0 <command>
  • 使用终端仿真

黑客攻击

stdbuf是 GNU 工具的一部分。

https://www.gnu.org/software/coreutils/manual/html_node/stdbuf-invocation.html

unbufferedexpect 的一部分包裹。

https://wiki.tcl.tk/3548

关键是让程序认为它处于交互模式(就像您从控制台启动它一样)。

前两个选项非常老套,并非在所有情况下都有效(不知道 java 命令是否适用于它们?)

仿真

第三种选择最有希望。我们启动一个程序(终端模拟器)来模拟交互式终端,使程序认为它正在真正的 Activity session 中工作!

Pty4j

您可以使用pty4j也是:

从那里:https://github.com/traff/pty4j



// The command to run in a PTY...
String[] cmd = { "java", "-jar", "path_to_jar" };
// The initial environment to pass to the PTY child process...
String[] env = { "TERM=xterm" };

PtyProcess pty = PtyProcess.exec(cmd, env);

OutputStream os = pty.getOutputStream();
InputStream is = pty.getInputStream();

// ... work with the streams ...

// wait until the PTY child process terminates...
int result = pty.waitFor();

// free up resources.
pty.close();

Zt-exec

也许值得一试 zt-exec

我不知道它如何执行命令。

但可能就是这样(我没有测试过)。

使用https://github.com/zeroturnaround/zt-exec

    new ProcessExecutor().command("java", "-jar path_to_jar")        .redirectOutput(new LogOutputStream() {            @Override            protected void processLine(String line) {                ...            }        })        .execute();

这应该可行,但我没有测试过。一般来说,没有办法很好地解决您的问题。

根据您想要的目标平台考虑使用 unbuffered , stdbuff或(最慢的)终端仿真...

请告诉我是否有帮助,祝你好运! :)

关于java - 如何从另一个 jar 运行一个 jar 并在执行期间显示第一个可运行的控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47260574/

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