fut*_*lib 5 java console paging less-unix
我需要less从我的 Java 控制台应用程序执行带有分页的命令。但是,我发现执行外部命令的唯一方法是Runtime.getRuntime().exec(),这要求我通过流写入/读取输入/输出。所以像catwork这样的命令(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());
}
}
Run Code Online (Sandbox Code Playgroud)
要运行它,您应该使用java Test $(tty). 该tty程序打印连接到其标准输入的终端的名称。
我不太确定这个解决方案的可移植性;至少它可以在 Linux 上运行。
| 归档时间: |
|
| 查看次数: |
1557 次 |
| 最近记录: |