gocron/modules/utils/utils_windows.go

44 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// +build windows
package utils
import (
"syscall"
"time"
"os/exec"
"strconv"
)
// 执行shell命令可设置执行超时时间
func ExecShellWithTimeout(timeout int, command string) (string, error) {
cmd := exec.Command("cmd", "/C", command)
// 隐藏cmd窗口
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
// 不限制超时
if timeout <= 0 {
output ,err := cmd.CombinedOutput()
return ConvertEncoding(string(output), err)
}
d := time.Duration(timeout) * time.Second
timer := time.AfterFunc(d, func() {
// 超时kill进程
exec.Command("taskkill", "/F", "/T", "/PID", strconv.Itoa(cmd.Process.Pid)).Run()
cmd.Process.Kill()
})
output ,err := cmd.CombinedOutput()
timer.Stop()
return ConvertEncoding(string(output), err)
}
func ConvertEncoding(outputGBK string, err error) (string, error) {
// windows平台编码为gbk需转换为utf8才能入库
outputUTF8, ok := GBK2UTF8(outputGBK)
if ok {
return outputUTF8, err
}
return "命令输出转换编码失败(gbk to utf8)", err
}