Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何读取Java代码中的终端(Ubuntu)输出(输出永不结束/退出)_Java_Android_Sockets_Terminal - Fatal编程技术网

如何读取Java代码中的终端(Ubuntu)输出(输出永不结束/退出)

如何读取Java代码中的终端(Ubuntu)输出(输出永不结束/退出),java,android,sockets,terminal,Java,Android,Sockets,Terminal,Ubuntu 19.10 使用InElij最新版本 爪哇 目的: 使用java代码,使用终端监控和验证android设备上的测试, 例如,android设备上的tcpdump命令 Logcat命令等等 问题是,如果输出总是侦听/写入,java就无法获取字符串, 只有当我关闭终端(ctrl c),然后java立即获取字符串 我需要的是得到终端提供的实时输出,似乎终端被锁定了,我知道我需要打开一个套接字连接来实时读取输出 任何帮助都将不胜感激对于tcpdump,请使用--immediate mode

Ubuntu 19.10 使用InElij最新版本 爪哇

目的: 使用java代码,使用终端监控和验证android设备上的测试, 例如,android设备上的tcpdump命令 Logcat命令等等

问题是,如果输出总是侦听/写入,java就无法获取字符串, 只有当我关闭终端(ctrl c),然后java立即获取字符串

我需要的是得到终端提供的实时输出,似乎终端被锁定了,我知道我需要打开一个套接字连接来实时读取输出


任何帮助都将不胜感激

对于
tcpdump
,请使用
--immediate mode
命令行选项

--即时模式

以“即时模式”捕获。在这种模式下,数据包一到达就被传送到tcpdump,而不是为了提高效率而进行缓冲。如果将数据包打印到终端而不是文件或管道,则在打印数据包而不是将数据包保存到“保存文件”时,这是默认设置


如果程序缓冲其输出,则无法刷新该文本,除非该程序具有启用自动刷新的命令行选项。当stdout是控制台时,许多程序将自动刷新,但出于性能原因,如果stdout是文件或管道,则会进行缓冲。这是缓冲区读取器,在这种情况下没有文件您无法读取终端窗口的内容,但您可以读取控制台程序的输出。这在文章@Eyal中有描述。什么是缓冲读取器?我说的stdout是
tcpdump
看到的。由于
tcpdump
不是Java程序,因此没有缓冲读取器
tcpdump
将看到其标准输出是一个管道。(管道连接到您的Java程序,但
tcpdump
不知道这一点。)tcpdump只是一个继续监视的命令示例,从不退出,logcat也是一个很好的示例,我无法从缓冲区读取器中实时获取字符串。我猜我理解错了,我的Java代码有时包含tcpdump,有时,为了实时捕获问题,我使用java打开术语:ProcessBuilderProcessBuilder=new ProcessBuilder();命令(“bash”、“-c”、“adb-s 192.168.1.199 shell tcpdump-vv-i eth0-s 0|grep error”);processproc=null;proc=processBuilder.start();这样我就不能得到字符串,这对我来说真的很糟糕me@Eyal请看。@Eyal您说过“只有当我关闭终端(ctrl-c),然后java立即获取字符串时”。如Stefan提供的链接所示,如果Java没有获得管道输出,它如何从终端获取字符串?