参考文章: https://www.baeldung.com/run-shell-command-in-java
package org.kanpiaoxue.util; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * <pre> * StreamGobbler.java * @author kanpiaoxue<br> * @version 1.0 * Create Time 2014年9月11日 上午10:54:38<br> * Description : 外部数据流消费器 * </pre> */ public final class StreamGobbler extends Thread { private static final Logger LOGGER = LoggerFactory .getLogger(StreamGobbler.class); private static final String ERROR_MSG = "error"; private final InputStream is; /** * <pre> * 是否需要打印错误log * </pre> */ private final boolean printErrorLog; /** * <pre> * @param is 输入流 * @param type 类型 * </pre> */ public StreamGobbler(InputStream is, String type) { super(); Preconditions.checkNotNull(is, "InputStream is null."); Preconditions.checkArgument(!Strings.isNullOrEmpty(type), "type is null or empty!"); this.is = is; this.printErrorLog = type.trim() .equalsIgnoreCase(ERROR_MSG); } /* * (non-Javadoc) * @see java.lang.Thread#run() */ @Override public void run() { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); try { for (String line = reader.readLine(); line != null; line = reader .readLine()) { // 根据标识位打印出不同的log格式 if (printErrorLog) { LOGGER.debug("{}>{}", ERROR_MSG, line); } else { LOGGER.debug(line); } } } catch (IOException e) { LOGGER.error(e.getMessage(), e); } finally { IOUtils.closeQuietly(reader); } } }
举例如下:下面的代码不完整
String msg = String.format("execute cmd:%s", cmd); LOGGER.info(msg); Stopwatch w = Stopwatch.createStarted(); Process process = Runtime.getRuntime().exec(cmd); // 消费掉IO流,防止程序被阻塞卡死 new StreamGobbler(process.getInputStream(), "normal").start(); new StreamGobbler(process.getErrorStream(), "error").start(); int exitCode = process.waitFor(); boolean flag = (0 == exitCode); LOGGER.info("{}. exitCode : {}, -->{}! It consumes {}", msg, exitCode, (flag ? "SUCCESS" : "FAILURE"), w.toString());
相关推荐
### CMD/cmd命令大全 在计算机领域,特别是对于Windows操作系统用户来说,掌握一些基本的命令行操作是非常有用的。本文将详细介绍一份“CMD/cmd命令大全”中列出的一些重要且实用的命令,帮助读者更好地理解和运用...
标题“shellcmd_v2.1:添加右键菜单项以快速打开CMD/命令提示符/命令行/命令窗口/DOS”涉及的是一个实用工具,它通过批处理技术为Windows操作系统添加了一个功能,允许用户在桌面、文件夹或任何文件上右键点击,快速...
右键添加CMD/命令行/命令窗口/命令提示符(终极版)。自己用批处理写的,这个问题就算终结了吧。哈哈。 有什么问题请发邮件至邮箱。
在Java编程中,有时我们需要与操作系统进行交互,执行系统级别的命令,例如在控制台执行CMD命令或者通过SSH连接远程Linux服务器执行shell命令。这在自动化脚本、系统管理或者远程监控等场景中非常常见。本篇文章将...
// 处理命令执行后的结果 } // ... } ``` 最后,关于"logSystem"这个文件名,可能是日志文件,记录了执行shell命令时的一些系统级信息。在实际开发中,我们通常会将shell命令的执行结果或错误信息记录到日志,...
除了直接在CMD窗口中查看命令执行的结果之外,还可以将结果保存到文件中以便后续处理或分析。这种方式对于自动化脚本来说尤其有用。 #### 5. 实现细节 - 在VBS脚本中使用`>`操作符可以轻松实现将命令结果保存到...
当命令执行完成后,我们可以在事件处理器中获取并处理CMD的输出。 值得注意的是,`cmd /c`前缀是告诉CMD执行完指定的命令后立即退出。如果命令返回结果包含多行,可以通过`OutputData`事件来逐行处理。如果需要捕获...
在设计视图中,添加一个TextBox控件让用户输入CMD命令,一个Button控件触发命令执行,还可以添加一个RichTextBox控件用于显示命令执行的结果。在TextBox中,用户可以输入如"dir"、"ping"等常见的CMD命令,而在Button...
- **解析**:`subprocess.call`与`subprocess.Popen`类似,但会等待命令执行完毕,并返回命令的退出状态码。这使得我们可以根据返回值来判断命令是否成功执行。 #### 二、使用`os`模块 除了`subprocess`模块外,还...
本文将深入探讨如何使用VC++6.0通过`CreateProcess`执行CMD命令,并利用命名管道(Named Pipe)来获取命令执行后的返回信息。 首先,`CreateProcess`是Windows API中用于创建新进程和子进程的关键函数。它接受一...
c++执行cmd命令c++执行cmd命令c++执行cmd命令c++执行cmd命令c++执行cmd命令c++执行cmd命令
JNI在各种场景下都非常有用,比如性能优化、利用系统底层功能或者如本例所示,执行系统级别的操作,例如运行shell命令。本文将深入探讨如何使用JNI在Android中执行shell命令。 首先,理解JNI的工作原理是必要的。...
如果只需要简单的命令执行和少量的输出,`popen`可能是最佳选择。对于更复杂的场景,如处理大量数据或需要精确控制子进程,匿名管道或临时文件可能更为合适。总的来说,了解这些方法的优缺点可以帮助你在不同情况下...
在易语言中,我们可以使用控制台调用CMD(命令提示符)命令来执行系统级别的操作,如文件管理、系统信息查询等。这篇源码教程主要关注的是如何在易语言环境下实现这一功能。 首先,我们需要了解CMD命令的基本概念。...
总结来说,Excel调用Shell命令执行Bash脚本和命令行代码的关键在于VBA的Shell函数,它允许我们通过Excel界面与操作系统进行交互。通过这种方式,我们可以利用Excel的强大计算能力,结合Bash脚本的灵活性,创建出功能...
首先,我们来看如何将shell命令执行的结果保存到字符串中。在Python中,可以利用subprocess模块提供的Popen类来创建子进程,从而执行shell命令。以下是一个具体的实例代码,展示了如何完成这个操作。 方法一:将...
// 显示命令执行结果 txtResult.Text = result; // 假设txtResult是一个TextBox控件,显示命令输出 } ``` 在这个例子中,`btnExecute_Click`是按钮点击事件处理程序,它获取用户在文本框`txtCommand`中输入的命令...
Java程序是如何执行CMD命令的,就是需要RunTime、Process类而已。 具体代码在文档中
在易语言控制台调用CMD命令的实践中,我们还可以遇到一些常见的问题,比如命令执行权限不足、命令格式错误、命令执行超时等。为了解决这些问题,我们需要对CMD命令的语法有深入理解,同时熟悉易语言中处理错误和异常...
这主要涉及到了VB的外壳交互(Shell Interaction)功能,通过这个功能,开发者可以调用操作系统命令行工具,如CMD,执行各种系统命令,并获取命令执行后的结果。下面将详细介绍如何在VB中实现这一功能。 首先,我们...