java - 如何从 Java 控制台应用程序通过分页执行 "less"?

标签 java console paging less-unix

我需要从我的 Java 控制台应用程序执行带分页的 less 命令。但是,我发现执行外部命令的唯一方法是 Runtime.getRuntime().exec(),这需要我通过流写入/读取输入/输出。所以像 cat 这样的命令可以工作(less 实际上就像 cat 一样),但我需要分页功能。

在 C 中,我会使用 system()。在 ruby 中,Kernel.exec完成工作。

有什么方法可以用 Java 完成吗?

最佳答案

当您使用 Runtime.exec() 执行外部进程时,其标准输入和输出流未连接到您运行 Java 程序的终端。您可以使用 shell 重定向来连接它,但首先您需要知道要使用哪个终端。无法使用标准 API 找到终端,但您可能可以找到一个开源库来执行此操作。

要查看它是否可以完成,该程序在 less 中自行打开:

public class Test {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec(
                new String[] {"sh", "-c",
                "less Test.java < "+args[0] + " > "+args[0]});
        System.out.println("=> "+p.waitFor());
    }
}

要运行它,您应该使用 java Test $(tty)tty 程序打印连接到其标准输入的终端的名称。

我不太确定这个解决方案的可移植性;至少它适用于 Linux。

关于java - 如何从 Java 控制台应用程序通过分页执行 "less"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065210/

相关文章:

Java java.lang.ClassNotFoundException : jade. core.migration.InterPlatformMobilityService

windows - Windows 控制台是否支持 ANSI?

ASP.NET、SQL 2005 "paging"

asp.net-core - Blazor 组件分页

linux - 错误 : unable to handle kernel paging request at

尝试添加一行来创建 Map 时出现 Javassist CannotCompileException

java - 如何允许用户在 Android 应用程序中手动编辑属性文件?

java - Spring 初始化不正确的影响

vim - 在 scala sbt 控制台中使用 vim,scala repl ?

Java - 打印显示换行符的字符串