java执行Linux命令的问题

问题描述

我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())

时间: 2024-10-30 15:11:47

java执行Linux命令的问题的相关文章

java 执行linux命令判断某个文件是否存在

问题描述 java 执行linux命令判断某个文件是否存在 java用sshxcute 连接linux服务器,判断一个某个路径下的某个文件或文件夹是否存在? 给出返回值. 解决方案 http://www.cnblogs.com/emanlee/p/3583769.html

java执行Linux命令的方法_java

本文实例讲述了java执行Linux命令的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: public class StreamGobbler extends Thread {            InputStream is;      String type;        public StreamGobbler(InputStream is, String type) {          this.is = is;          this.type = ty

(急急急)java执行linux命令的问题

问题描述 我在Linxu执行一条这样的命令:把一个pdf文件转换成.swf的文件命令:pdf2swf-t/u01/word2swf/1.pdf-o/u01/word2swf/1.swf-sflashversion=9pdf2swf是个命令,把1.pdf文件转成1.swf文件,执行成功.但我想用JAVA来执行这个命令:Stringcommand="/usr/local/bin/pdf2swf-t/u01/word2swf/1.pdf-o/u01/word2swf/1.swf-sflashversi

PHP执行Linux命令常用的6个函数

一般情况下,很少会用php去执行linux命令,不过特殊情况下,你也许会用到这些函数.以前我知道有二个函数可以执行linux命令,一个是exec,一个是shell_exec.其实有很多的,结合手册内容,介绍以下6个函数. 1,exec函数 <?php      $test = "ls /tmp/test";   //ls是linux下的查目录,文件的命令      exec($test,$array);       //执行命令      print_r($array);   

io-java执行linux命令从linux服务器上读取log日志文件,按行读从指定字符串开始读

问题描述 java执行linux命令从linux服务器上读取log日志文件,按行读从指定字符串开始读 [INFO ] 2015-09-23 11:22:06,691 [threadPoolTaskExecutor-41] com.sto.pdaplatform.module.rediscommon.core.ParseObjectFactory.getParseObjFactory(ParseObjectFactory.java:27) >>> the original data is

Java程序执行Linux命令

java程序中要执行linux命令主要依赖2个类:Process和Runtime 首先看一下Process类: [plain] view plaincopyprint? ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,   该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入.执行输出到进程.等待进程完成.   检查进程的退出状态以及销毁(杀掉)进程的方法.   创建进程的方法可能无法

Java中通过jsch来连接远程服务器执行linux命令_java

有时候你可能需要通过代码来控制执行linux命令实现某些功能. 针对这类问题可以使用JSCH来实现,具体代码如下: public class CogradientImgFileManager{ private static final Logger log = LoggerFactory.getLogger(CogradientImgFileManager.class); private static ChannelExec channelExec; private static Session

json-java程序执行linux命令;;;求大神啊+++++++++++++

问题描述 java程序执行linux命令:::求大神啊+++++++++++++ java程序执行linux命令,按照三个条件查询service.log里信息 如何实现啊 时间条件是每天的log日期,waybillNo,opOrgCode 日志里每条记录是一串json {"pdaUuid":"f2b0fa0db0e749a0959ad22620cb06c4","goodsType":"","effectiveType

关于java执行ubuntu命令的问题

问题描述 关于java执行ubuntu命令的问题 同志们好,我在java代码中这样写的: public class LinuxTest { public static void main(String[] args) { LinuxTest test = new LinuxTest(); test.chmod("/usr/java/apache-tomcat-7.0.62/webapps/UploadSpringMVC/upload/tlbbtestfile.txt"); } /**