某些程序以一种方式产生bash输出,使得用户体验像改变值而不是打印行的字符串(bash向下滚动以显示所有变化的输出)。这种现象叫什么?如何在例如java程序或bash脚本中实现。如何解析输出?它只是打印新线但使用一些特殊功能?
top是一个使用输出数据“现象”的程序
使用了Okey游标。
然后我如何在java中解析它们?我试过这段代码,但它没有打印任何东西
public static void exeTest(String [] args) throws IOException{
if (args.length <= 0) {
System.out.println("empty command");
return;
}
Process process = new ProcessBuilder(args).start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
System.out.printf("Output of running %s is:",
Arrays.toString(args));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
感谢所有好的答案,我现在对这个主题更熟悉了,即使你仍然无法解析像java中的top那样的程序输出。我会关闭这个问题,并进一步研究如何在java中解析它。然后我可以开始另一个更具体的问题,就是解析java中的输出。
答案 0 :(得分:3)
不是打印整行(与println
或打印%n
一样),而是写入退格符(\b
)或没有换行(\r
)的裸回车来移动光标回到你要打印的内容之前。
答案 1 :(得分:2)
由于您已使用bash
标记了问题,因此我假设您正在运行linux / cygwin。因此终端可能与ANSI兼容。在这种情况下,您还可以使用ANSI escape sequences ...
e.g:
echo -e "Hello world\rHi"
# Produces "Hillo world" since the line is not cleared before printing "Hi".
echo -e "Hello world\r\e[KHi"
#produces "Hi" (prints "Hello world", goes to 1st column, clears to last column, prints "Hi")
# For more details, refer above link.
如果你需要在循环中运行它(这是最明显的情况),请确保
注:
上面给出的代码是bash命令。对不起,我对java语法并不熟悉,但据我所知,
System.out.println
System.out.printf
\e
引用<ESC>
字符(ascii = 27),可以使用java字符串中的\033
来实现。答案 2 :(得分:0)
你可以这样说,我的意思是印刷新的线条。想象一下你有循环:
String header = "Current val:";
String buffer = "";
for(int i = 0; i < val; i++) {
buffer = header + " " + i + "\n";
buffer += (val - i) + "iterations left\n";
//add other strings to buffer...
//Clear console here
//Print buffer
}
因此,当变量发生变化时,输出将显示为静态。
其他更强大的方法是使用goto(x, y)
类似函数进行精确输出操作。 Java在标准api中没有这个,但是有它的库。
Java gotoxy(x,y) for console applications
答案 3 :(得分:0)
curses可用于实现此目的。搜索“java curses”和“bash curses”会产生良好的效果。
爪哇:
http://sourceforge.net/projects/javacurses/
What's a good Java, curses-like, library for terminal applications?
What's the best way to get text user-interfaces (ncurses-like) functionality in Java?
对于Bash: