问题描述
我java执行Linux命令使用的是ganymed-ssh2-build工具包,Linux命令输出结果比较短的时候没有问题,在Linux环境下面如果输出结果行数比较多,超过了一定行数的时候,会显示“----------more-------------”字样,然后输入空格或者回车,会继续展示余下的文本结果。现在我不知道怎么取“----------more-------------”这行值,然后接下来如何取得后面剩余的文本结果。请各位大神帮帮忙,谢了,在线等。。。。。我的代码如下:publicList<String>excuteList(PollingHostInfoph,Stringcommand){Connectionconn=null;Sessionsession=null;//finalStringBuildersb=newStringBuilder();BufferedReaderstdoutReader=null;List<String>list=newArrayList();try{conn=newConnection(ph.getAddress());conn.connect();booleanconnFlag=conn.authenticateWithPassword(ph.getUsername(),ph.getPassword());if(connFlag){session=conn.openSession();session.requestDumbPTY();Thread.sleep(1000);session.execCommand(command);InputStreamstdout=newStreamGobbler(session.getStdout());stdoutReader=newBufferedReader(newInputStreamReader(stdout),10240);longstart=System.currentTimeMillis();inti=0;while(true){Stringline=stdoutReader.readLine();//假如包含if(line.contains("more")){logger.info("出现more关键字,继续读取......");session.execCommand("");stdout=newStreamGobbler(session.getStdout());stdoutReader=newBufferedReader(newInputStreamReader(stdout),10240);}if(line==null||System.currentTimeMillis()-start>100000){logger.info("命令结果读取完毕!");break;}list.add(line);i++;logger.info("i+line=="+i+line);}}}catch(Exceptione){logger.info("excuteList方法出现异常!");e.printStackTrace();}finally{if(session!=null){session.close();}if(conn!=null){conn.close();}if(stdoutReader!=null){try{stdoutReader.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}returnlist;}
解决方案
解决方案二:
判断有more后:catxxx>temp.txt解析temp.txt
解决方案三:
linux命令是:dispiprout执行命令后输出结果是:<YX4-CORE-NE40E-1>dispiprouRouteFlags:R-relay,D-downloadtofib------------------------------------------------------------------------------RoutingTables:PublicDestinations:277Routes:279Destination/MaskProtoPreCostFlagsNextHopInterface10.87.20.0/24Static600RD10.96.161.2Eth-Trunk210.87.21.0/24Static600RD10.96.161.2Eth-Trunk210.87.22.104/29Static600RD10.96.161.18GigabitEthernet4/0/710.87.24.0/25Static600RD10.96.161.2Eth-Trunk210.87.25.0/24Static600RD10.96.161.2Eth-Trunk210.87.30.0/25Static600RD10.96.161.117GigabitEthernet4/0/1110.87.30.128/25Static600RD10.96.161.2Eth-Trunk210.87.31.0/24Static600RD10.96.161.2Eth-Trunk210.87.32.0/24Static600RD10.96.161.18GigabitEthernet4/0/710.87.39.0/24Static600RD10.96.161.18GigabitEthernet4/0/710.87.45.0/24Static600RD10.96.161.18GigabitEthernet4/0/710.87.62.35/32Static600RD10.96.161.18GigabitEthernet4/0/710.87.88.0/24Static600RD10.96.161.18GigabitEthernet4/0/7----More----
解决方案四:
line.contains("More")--大小写敏感
解决方案五:
我代码里改成了“if(line2!=null&&line2.toLowerCase().contains("more")){”也不行。现在的主要问题是:不知道怎么取“----More----”这一行文本,more不属于执行的文本结果,是个提示,输入空格的话会再展示一屏数据。
解决方案六:
有用过ganymed-ssh2执行Linux命令的朋友吗?请帮忙指点一下把
解决方案七:
我明白了,你这个more是类似yes/no的系统提示,不出stout的输出,这种情况下你要判断more再重新发指令是比较麻烦的,你还不如直接判断当前stdout里面有多少行,如果超过了iproute命令的行数就直接发空格继续读取注意同一个session里面发指令最好用sess.getStdin().write("y".getBytes())