(摘) Golang中执行Shell命令,隐藏黑窗口的方法

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

最近用lorca做一个桌面工具,在调用命令行时总是会闪一个黑窗口,无时无刻不在提醒自己:它是做后端的。

有一个库 github.com/CodyGuo/win 通过调用win的api来隐藏窗口。不过它是没有返回字符串的。

最终网上搜索到方法,即在调用exec时,设置好参数。同时配合编译时的 go build -ldflags “-w -s -H windowsgui” 几乎完美解决。

c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}

// 执行命令
func Command1(cmd string) (string, error) {
	var c *exec.Cmd
	switch runtime.GOOS {
	case "darwin":
	case "windows":
		c = exec.Command("cmd", "/C", cmd)
	case "linux":
		c = exec.Command("bash", "-c", cmd)
	}

	c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
	output, err := c.CombinedOutput()
	// fmt.Println(cmd, string(output), err, "--")
	return string(output), err
}

// 执行命令
func Command(params []string) (string, error) {
	var c *exec.Cmd
	switch runtime.GOOS {
	case "darwin":
	case "windows":
		para := append([]string{"/C"}, params[0:]...)
		c = exec.Command("cmd", para...)
	case "linux":
		para := append([]string{"-c"}, params[0:]...)
		c = exec.Command("bash", para...)
	}
	c.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
	output, err := c.CombinedOutput()
	return string(output), err
}

相关文章