Golang执行cmd命令行的方法
<code>第一个参数是命令名称,后面参数可以有多个命令参数。</code>
<code>cmd := exec.Command(</code><code>"ls"</code><code>, </code><code>"-a"</code><code>)</code>
<code>if stdout, err := cmd.StdoutPipe(); err != nil { //获取输出对象,可以从该对象中读取输出结果</code>
<code> log.Fatal(err)</code>
<code>}</code>
<code>defer</code> <code>stdout.Close() // 保证关闭输出流</code>
<code>if</code> <code>err := cmd.Start(); err != nil { // 运行命令</code>
<code> log.Fatal(err)</code>
}
<code>if opBytes, err := ioutil.ReadAll(stdout); err != nil { // 读取输出结果 </code>
<code> log.Fatal(err)</code>
<code>} else {</code>
<code> log.Println(string(opBytes))</code>
<code>}</code>
<h1>2. 将命令的输出结果重定向到文件中: </h1>
<code> </code><code>stdout, err := os.OpenFile(</code><code>"stdout.log"</code><code>, os.O_CREATE|os.O_WRONLY, </code><code>0600</code><code>) </code>
<code> </code><code>if</code> <code>err != nil {</code>
<code> </code><code>log.Fatalln(err)</code>
<code> </code><code>}</code>
<code> </code><code>defer</code> <code>stdout.Close()</code>
<code> cmd.Stdout = stdout // 重定向标准输出到文件</code>
<code> </code><code>// 执行命令</code>
<code> </code><code>if</code> <code>err := cmd.Start(); err != nil {</code>
<code> </code><code>log.Println(err)</code>
<code> </code><code>}</code>
<h1>3. cmd的Start和Run方法的区别: </h1>
Start执行不会等待命令完成,Run会阻塞等待命令完成。
<code>cmd := exec.Command(</code><code>"sleep"</code><code>, </code><code>"10"</code><code>)</code>
<code>err := cmd.Run() //执行到此处时会阻塞等待10秒</code>
<code>err := cmd.Start() //如果用start则直接向后运行</code>
<code>if</code> <code>err != nil {</code>
<code> log.Fatal(err)</code>
<code>}</code>
<code>err = cmd.Wait() //执行Start会在此处等待10秒</code>
<h1><code>4. 如果命令名称和参数写成一个字符串传给</code>Command方法,可能会执行失败报错:file does not exist,但此时如果按以下方式强行启动一个DOS窗口(windows平台)进行执行,也是成功的。</h1>
在Windows平台,强行弹出DOS窗口执行命令行:
<pre class="has"><code class="language-html">cmdLine := pscp -pw pwd local_filename user@host:/home/workspace cmd := exec.Command("cmd.exe", "/c", "start " cmdLine) err := cmd.Run() fmt.Printf("%s, error:%v \n", cmdLine, err) </code></pre><h1>5. 运行时隐藏golang程序自己的cmd窗口:</h1>
go build -ldflags -H=windowsgui
<h1>6. Windows平台上,执行系统命令隐藏cmd窗口:</h1>
cmd := exec.Command("sth")
if runtime.GOOS == "windows" {
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
}
err := cmd.Run()
您可能感兴趣的文章:
Golang执行cmd命令行的方法
PHP程序在php执行正常,在CMD报扩展加载错误
cmd命令行下运行php文件的示例
python怎么调用cmd命令
怎么检查电脑上是否安装了python
Golang模仿七牛图片处理API
PHP执行cmd命令的方法
php不支持执行cmd命令行
shell命令行参数用法简介
学习手动添加和删除Windows服务