使用Apache Common Execs库封装AbstractCommonExecs
测试类是GbkCommonExecs完整代码参考 笔记: http://segmentfault.com/n/1330000004289920
为什么执行GbkCommonExecs没有输出(可能死锁了)
贴上相关截图
如果把PipedInputStream和PipedOutputStream的方式换掉,换成ByteArrayOutputStream的方式,就能够正常输出,参考笔记代码的注释代码。
应该怎么使用PipedInputStream和PipedOutputStream使得我能够每行读取标准输出并做解析,解析到我需要的内容。
UPDATE:
这个AbstractCommonExecs
并不能获得脚本的错误输出,比如创建一个文件夹两次,第二次应该会提示类似目录已存在
的错误,但是封装后的代码只能看到apache common execs
的异常堆栈:
UPDATE:
尝试了LogOutputStream的方式,参考下面的答案,但是避免不了出现字符编码的问题。
ApacheCommonExec.java,https://gist.github.com/cb372/2224509
直接跑这样的代码就可以知道了。
UPDATE:
找到一个可以替代的库,https://github.com/zeroturnaround/zt-exec
从描述来看处理不少windows下遇到的问题,如参数为空的问题,编码的问题。
commons-exec 包中有 org.apache.commons.exec.LogOutputStream 类
可以通过继承该类实现一个实时输出的队列 读取阻塞队列里的内容来获取命令输出结果
Java管道流使用起来问题比较多,不太方便且控制不好容易出现IOException
PumpStreamHandler streamHandler = new PumpStreamHandler(CommandExecOutputStream);