cmd.Start() 与cmd.Run()的区别
时间: 2024-04-01 12:31:44 浏览: 88
在os/exec包中,Cmd结构体提供了两个方法来执行外部命令,分别是Start()和Run()。它们的区别如下:
1. Start()方法:
- 该方法启动要执行的命令,但不等待命令执行完成,立即返回Cmd结构体。
- 可以通过Cmd.Wait()方法等待命令执行完成,并获取执行结果。
- 可以通过Cmd.Process属性获取启动的进程对象,然后进行进程控制和管理。
2. Run()方法:
- 该方法启动要执行的命令,并等待命令执行完成,然后返回执行结果。
- 如果命令执行过程中出错,Run()方法会返回错误信息。
- Run()方法会阻塞当前goroutine,直到命令执行完成。
因此,如果需要同时执行多个命令或需要对命令进行进程控制和管理,可以使用Start()方法。如果只需要执行一个命令并获取执行结果,可以使用Run()方法。
相关问题
帮我优化一下以下代码: <script> window.onload = function () { /** 如果用户使用IE浏览器,则跳转到Chrome浏览器以获取最佳体验*/ var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否为IE11以下版本的浏览器 var isIE11 = userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1; //判断是否为IE11浏览器 if (isIE || isIE11) { var objShell = new ActiveXObject("WScript.Shell"); if (!objShell.Run("cmd.exe /c start msedge ", 0, true)) { objShell.Run( "cmd.exe /c start msedge " + window.location.href, 0, true ); //cmd调用edge打开当前网页 return; } else if (!objShell.Run("cmd.exe /c start chrome ", 0, true)) { objShell.Run( "cmd.exe /c start chrome " + window.location.href, 0, true ); //cmd调用Chrome打开当前网页 return; } else if (!objShell.Run("cmd.exe /c start firefox ", 0, true)) { objShell.Run( "cmd.exe /c start firefox " + window.location.href, 0, true ); //cmd调用Firefox打开当前网页 return; } else if (!objShell.Run("cmd.exe /c start UCBrowser ", 0, true)) { objShell.Run( "cmd.exe /c start UCBrowser " + window.location.href, 0, true ); //cmd调用UCBrowser打开当前网页 return; } /** 关闭当前IE浏览器标签*/ if (isIE) { window.open("", "_self"); // window.close(); } else { window.open("", "_top"); // window.close(); } } }; </script>
以下是对代码的优化建议:
1. 使用现代浏览器的 API 替代 ActiveXObject,使代码更加可读且不依赖于特定的浏览器。
2. 将浏览器判断的逻辑抽离到一个函数中,使代码可重用。
3. 使用浏览器的原生方法打开新的标签页,避免使用 cmd 调用浏览器。
下面是优化后的代码:
```
<script>
window.onload = function() {
if (isIEBrowser()) {
openBrowserTab("msedge");
openBrowserTab("chrome");
openBrowserTab("firefox");
openBrowserTab("UCBrowser");
closeBrowserTab();
}
};
function isIEBrowser() {
var userAgent = navigator.userAgent;
return (
userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 ||
userAgent.indexOf("Trident") > -1 && userAgent.indexOf("rv:11.0") > -1
);
}
function openBrowserTab(browserName) {
var url = window.location.href;
var browser = window[browserName];
if (typeof browser !== "undefined") {
browser.open(url, "_blank");
}
}
function closeBrowserTab() {
if (typeof window.close === "function") {
window.close();
} else {
window.open("", "_self");
window.top.close();
}
}
</script>
```
这样可以更好地维护和扩展代码。
String startPath = "D:\\psc\\start.bat"; Runtime.getRuntime().exec("cmd.exe /c start " + startPath); Java修改为执行run_psc_monitor.vbs脚本
在Java中,如果你想通过`Runtime.getRuntime().exec()`方法执行一个名为`run_psc_monitor.vbs`的VBScript脚本,你需要将命令调整为匹配VBScript的启动语法。VBS文件通常用于Windows批处理,可以这样修改:
```java
String vbsStartPath = "D:\\psc\\run_psc_monitor.vbs";
Runtime.getRuntime().exec("cscript //nologo " + vbsStartPath);
```
这里使用`cscript`命令来执行VBScript脚本,并加上`//nologo`选项来隐藏命令行窗口(如果不希望看到命令行)。如果`run_psc_monitor.vbs`依赖于特定的参数,你可以将其传递到`vbsStartPath`变量之前,例如:
```java
String scriptArgs = "arg1 arg2"; // 根据实际需要替换参数
String vbsCommand = "cscript //nologo " + vbsStartPath + " " + scriptArgs;
Runtime.getRuntime().exec(vbsCommand);
```
阅读全文