精华内容
下载资源
问答
  • python学习小记-将shell命令行封装进函数 import os command = "python demo2.py" os.system(command)

    python学习小记-将shell命令行封装进函数

    import os
    command = "python demo2.py"
    os.system(command)
    
    展开全文
  • 最近由于本人所在公司使用java调用命令行的操作比较多,于是基于java.lang.Runtime做了一套封装,以简化java调用命令行的编码。 本着工具的简单化,封装过程没有使用第三方插件,采用策略模式提供命令执行结果的...

            在使用java原生库的java.lang.Runtime进行命令行调用的过程中,需要重复编写不少代码。 最近由于本人所在公司使用java调用命令行的操作比较多,于是基于java.lang.Runtime做了一套封装,以简化java调用命令行的编码。

            本着工具的简单化,封装过程没有使用第三方插件,采用策略模式提供命令执行结果的判断自定义,采用builder模式提供Executor的自定义构建。使用者只需按找自己的需要构建Executor,然后调用对应的execute(..)方法或者executeMutilShell(..)(Linux下的多条命令行执行,window下使用execute(..)即可)即可,不需要再过多关注输出流和阻塞问题,简单方便。github地址,觉得有帮助的同学,欢迎帮忙加个start。

    快速开始

    maven依赖

    <dependency>
    	<groupId>com.github.swjuyhz</groupId>
    	<artifactId>ce4j</artifactId>
    	<version>1.1</version>
    </dependency>

            下面是贴出的使用demo。

    默认配置Executor

    插件默认:使用Stdout输出流,不使用错误输出流,不收集命令行输出,不判定执行结果(即使用空判定策略)

    Executor executor = BaseExecutor.newBuilder().build();
    	/*或者(效果同上,此为插件默认配置,完整版):
    	Executor executor3 = BaseExecutor
    				.newBuilder()
    				.useStdoutStreamGobbler(true, CheckStrategy.NONE_CHECK_STRATEGY_INSTANCE)
    				.collectAllOutputStdout(false)
    				.build();
    	*/
    	//window 
    	//单条命令行
    	if(executor.isWin()) {
    		ExecutedResult res = executor.execute("cmd /c dir");
    		System.out.println(res);
    		//多条命令行
    		ExecutedResult res1 = executor.execute("cmd /c C: && cd C:\\Users\\zyh\\Desktop\\learning && dir");
    		System.out.println(res1);
    	}else {
    		//Linux
    		//单命令行
    		ExecutedResult res2 = executor.execute("ls");
    		System.out.println(res2);
    		//多命令行
    		ExecutedResult res3 = executor.executeMutilShell(Arrays.asList("cd /root/deploy/zyh/bin/poems_generator/", "python3 compose_poem.py 佳"));
    		System.out.println(res3);
    	}

    自定义配置Executor

    自定义执行结果判定策略、使用流stdoutStream、收集命令行输出

    	Executor executor1 = BaseExecutor
    				.newBuilder()
    				//使用StdoutStream,使用自定义执行结果判定状态,ColonEndStrategy为插件实现的一种场景的判定策略,
                			//自定义判定策略实现com.zyh.ce4j.strategy.CheckStrategy即可
    				.useStdoutStreamGobbler(true, new ColonEndStrategy())
    				.collectAllOutputStdout(true)//收集命令行输出
    				.build();
    	//window 
    	//单条命令行
    	if(executor1.isWin()) {
    		ExecutedResult res = executor1.execute("cmd /c dir");
    		System.out.println(res);
    		Result stdouResult = res.getStdoutResult();
    		if(stdouResult.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		//多条命令行
    		ExecutedResult res1 = executor1.execute("cmd /c C: && cd C:\\Users\\zhengyh\\Desktop\\learning && dir");
    		System.out.println(res1);
    		Result stdouResult1 = res1.getStdoutResult();
    		if(stdouResult1.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult1.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    	}else {
    		//Linux
    		//单命令行
    		ExecutedResult res2 = executor1.execute("ls");
    		System.out.println(res2);
    		Result stdouResult = res2.getStdoutResult();
    		if(stdouResult.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		//多命令行
    		ExecutedResult res3 = executor1.executeMutilShell(Arrays.asList("cd /root/deploy/zyh/bin/poems_generator/", "python3 compose_poem.py 佳"));
    		System.out.println(res3);
    		Result stdouResult3 = res3.getStdoutResult();
    		if(stdouResult.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult3.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    	}

    自定义执行结果判定策略、使用errorStream流、收集命令行errorStream流输出

    stdoutStream 默认开启,否则可能导致命令行执行堵塞,除非命令行执行后没有该流的输出

    	Executor executor2 = BaseExecutor
    				.newBuilder()
    				//使用错误输出流Runtime.getRuntime().exec(comandLine).getErrorStream()
    				.useErrorStreamGobbler(true, new CheckStrategy() {
    				    @Override //自定义策略
    				    public Result endCheck(String lastPrint) {
    				       return new Result(Result.Status.UNKNOWN, "未检查执行结果,执行结果未知。", null);
    				    }})
    				.collectAllOutputError(true)//收集错误流输出的命令行
    				.build();
    	//window 
    	//单条命令行
    	if(executor1.isWin()) {
    		ExecutedResult res = executor2.execute("cmd /c dir");
    		System.out.println(res);
    		Result stdouResult = res.getStdoutResult();
    		if(stdouResult.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		
    		Result errorResult = res.getErrorResult();
    		if(stdouResult.getStatus() == Result.Status.UNKNOWN) {//依据自定义的策略
    			//收集的命令行执行的ERROR输出(Runtime.getRuntime().exec(comandLine).getErrorStream())
    			List<String> lines = errorResult.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		
    		
    		//多条命令行
    		ExecutedResult res1 = executor2.execute("cmd /c C: && cd C:\\Users\\zhengyh\\Desktop\\learning && dir");
    		System.out.println(res1);
    		Result stdouResult1 = res1.getStdoutResult();
    		if(stdouResult1.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult1.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		Result errorResult1 = res1.getErrorResult();
    		if(stdouResult.getStatus() == Result.Status.UNKNOWN) {//依据自定义的策略
    			//收集的命令行执行的ERROR输出(Runtime.getRuntime().exec(comandLine).getErrorStream())
    			List<String> lines = errorResult1.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    	}else {
    		//Linux
    		//单命令行
    		ExecutedResult res2 = executor2.execute("ls");
    		System.out.println(res2);
    		Result stdouResult = res2.getStdoutResult();
    		if(stdouResult.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		Result errorResult1 = res2.getErrorResult();
    		if(stdouResult.getStatus() == Result.Status.UNKNOWN) {//依据自定义的策略
    			//收集的命令行执行的ERROR输出(Runtime.getRuntime().exec(comandLine).getErrorStream())
    			List<String> lines = errorResult1.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		//多命令行
    		ExecutedResult res3 = executor2.executeMutilShell(Arrays.asList("cd /root/deploy/zyh/bin/poems_generator/", "python3 compose_poem.py 佳"));
    		System.out.println(res3);
    		Result stdouResult3 = res3.getStdoutResult();
    		if(stdouResult.getStatus() == Result.Status.SUCCESS) {
    			//收集的命令行执行的STDOUT输出(Runtime.getRuntime().exec(comandLine).getInputStream())
    			List<String> lines = stdouResult3.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    		Result errorResult2 = res3.getErrorResult();
    		if(stdouResult.getStatus() == Result.Status.UNKNOWN) {//依据自定义的策略
    			//收集的命令行执行的ERROR输出(Runtime.getRuntime().exec(comandLine).getErrorStream())
    			List<String> lines = errorResult2.getData();
    			for(String line:lines) {
    				System.out.println(line);
    			}
    		}
    	}

     

     

    展开全文
  • MP4命令行封装工具

    热门讨论 2011-11-01 15:56:07
    用RTSP协议播放avc-mp4,流化mp4工具,分离mp4,合成mp4
  • 命令行封装jar包

    2017-12-25 17:31:15
    确保jar包创建之前java环境...验证方法:cmd命令行输入:jar.exe,出现以下界面即表示可生成jar包。 输入命令:jar -cvf 即将生成的jar包名称 待生成jar路径 回车即可生成。 注意:生成的文件默认保存在当前路劲下。

    确保jar包创建之前java环境配置完成即可。

    验证方法:cmd命令行输入:jar.exe,出现以下界面即表示可生成jar包。


    输入命令:jar -cvf 即将生成的jar包名称 待生成jar路径

    回车即可生成。

    注意:生成的文件默认保存在当前路径下。


    展开全文
  • Windows下基于C++的RRDTOOL命令行封装

    千次阅读 2009-04-26 20:15:00
    Windows下基于C++的RRDTOOL命令行封装 前言:前些日子把RRDTOOL彻底研究了一番,发现在Windows平台上很少用到RRDTOOL,一般都是自绘图形解决问题,而在Linux上却有很多商业、非商业的软件使用了RRDTOOL。...

     

    Windows下基于C++RRDTOOL命令行封装

     

    前言:前些日子把RRDTOOL彻底研究了一番,发现在Windows平台上很少用到RRDTOOL,一般都是自绘图形解决问题,而在Linux上却有很多商业、非商业的软件使用了RRDTOOL。比如做监控的ZenossCacti.

     

             本来我是想用Python写这个封装的,但是估摸着才学Python没多久实现起来有些困难故而放弃了,于是就用C++~~哎,悲叹一声!

     

             一般基于时间轴变化的事件都可以用RRDTOOL来搞定,只要横坐标为时间,不管纵坐标怎么变化,那都是数据展示的变化。在这里,我不打算介绍SNMPRRDTOOL的理论知识及如何使用SNMP++库,具体都可以通过Google获取。

     

             通过这个封装,把创建RRD库、更新RRD库、生成RRD图的三大核心功能实现,同时也完成了导出数据到XML文件的功能封装。其中所有的RRDTool封装类都同继承自RRDToolBase,三大功能类分别为:RRDCreateRRDUpdateRRDGraph。具体可以参见源代码,在这不赘述。

     

    在这里给出一些有用的资源链接(demo包里有我自己整理收集的一些文档):

    RRDTool

    RRDTool官方站点 http://oss.oetiker.ch/rrdtool/index.en.html

    RRDTool教程 1.http://www.study-area.org/tips/rrdtool/rrdtool.html(先用Google把繁体转为简体再看吧)

    2. http://blog.csdn.net/ysuncn/category/324582.aspx

     

    SNMP

    1. http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol

    2.http://www.networkdictionary.cn/protocols/snmp.php

     

    SNMP++:

    1.    http://www.agentpp.com/snmp_pp3_x/snmp_pp3_x.html

     

    好了,我要和女朋友一起到外面转转了~

     

    下载地址:http://chenyu2202863.download.csdn.net/

    展开全文
  • 问题背景Linux下经常需要解压文件,直接在命令行敲命令解压是最便捷的。但问题在于,不同的压缩格式,需要用不同命令和不同参数,完全记不住啊。解决方式既然记不住,那就换一种思路,假如有一条命令能解压所有文件...
  • Ubuntu下将命令行封装成全局命令

    千次阅读 2016-04-06 14:52:48
    在刚开始使用ubuntu时,为了上网,我下载了一个linux版本的锐捷客户端Su-Linux,但是每次联网,都需要在终端中进入该客户端的目录,输入命令和参数,这样很麻烦,于是准备将该操作封装为一个全局命令rjlogin。...
  • [Java][Android][Process] 分享 Process 执行命令行封装

    千次阅读 多人点赞 2014-07-26 12:00:23
    在上一篇文章中提到,利用Java创建进程执行命令行语句创建过多后会出现无法创建进程的问题。 [Android] ProcessBuilder与Runtime.getRuntime().exec分别创建进程的区别 进行多次测试后发现是因为没有正常退出进程,...
  • ShellWrap:一个简单的命令行PHP封装
  • Spring命令行参数封装CommandLineArgs

    千次阅读 2018-11-21 18:07:27
    Spring对应用程序运行的命令行参数进行了抽象,这个抽象是类CommandLineArgs。 CommandLineArgs类将命令行参数分为两类: option 参数 以 --开头 可以认为是name/value对参数 例子 : --foo, --foo=bar 非 option...
  • vue-cli-gui:利用Electron对 vue ui 命令行进行封装
  • FFmpeg命令行封装

    千次阅读 2018-05-12 17:51:04
    本文主要记录通过FFmpeg对MP4,FLV,M3U8格式的封装和文件分析以及对这些格式的一些了解。 MP4格式 在互联网常见的格式中,跨平台最好的就是MP4,它可以在PC的Flashplayer中播放,又可以在Android和iOS中播放...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,535
精华内容 46,614
关键字:

命令行封装