php小编子墨为您带来关于在PHP中使用os/exec函数和在命令行中执行命令时出现的令人费解的不同结果的解析。在实际应用中,我们可能会遇到在命令行中能够成功执行的命令,在使用os/exec函数时却无法得到相同的结果的情况。这种情况往往会让我们感到困惑,并且难以找到解决办法。本文将为您解析其中的原因,并提供解决方案,以帮助您更好地理解和应用os/exec函数。
我编写了一个程序,在 golang 中运行命令使用包 os/exec 。
import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("taskkill", "/f /im VInTGui.exe") err := cmd.Run() if err != nil { fmt.Printf("err: %v\n", err) } }
当我运行该程序时,它打印: err: exit status 1
但是当我在 windows 命令行中运行命令 taskkill /f /im vintgui.exe 时。成功了。
为什么通过os/exec包运行命令和直接通过windows命令行(使用相同用户相同权限)运行命令有不同的结果?如何修复我的程序?
解决方案是使用 command 对象的 stderr 属性。这可以这样完成:
cmd := exec.command("taskkill", "/f /im vintgui.exe") var out bytes.buffer var stderr bytes.buffer cmd.stdout = &out cmd.stderr = &stderr err := cmd.run() if err != nil { fmt.printf("%v: %s\n", err, stderr.string()) return } fmt.println("result: " + out.string())
根据您的情况,只需更改
exec.command("taskkill", "/f /im vintgui.exe")
至
exec.Command("taskkill", "/f", "/im", "VInTGui.exe")
不要将所有参数合并到一个字符串。
以上就是使用 os/exec 和在命令行执行之间出现令人费解的不同结果的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号