page contents

golang如何执行脚本?

在golang标准库中提供了两种方式可以用来启动进程调用脚本

attachments-2021-10-avG0TjxO617c9bc062b15.jpg

golang如何执行脚本?在golang标准库中提供了两种方式可以用来启动进程调用脚本

第一种是在os库中的Process类型,Process类型包含一系列方法用来启动进程并对进程进行操作(参考: https://golang.org/pkg/os/#Process)

第二种是在os/exec库种通过Cmd类型的各个函数实现对脚本的调用,实际上Cmd是对Process中各种方法的高层次封装(参考: https://golang.org/pkg/os/exec/)

示例 使用Process执行脚本

  1. package main
  2.  
  3. import(
  4. "fmt"
  5. "os"
  6. )
  7.  
  8. func main(){
  9. shellPath :="/home/xx/test.sh"
  10. argv := make([]string,1)
  11. attr :=new(os.ProcAttr)
  12. newProcess,err := os.StartProcess(shellPath,argv,attr)//运行脚本
  13. if err !=nil{
  14. fmt.Println(err)
  15. }
  16. fmt.Println("Process PID",newProcess.Pid)
  17. processState,err := newProcess.Wait()//等待命令执行完
  18. if err !=nil{
  19. fmt.Println(err)
  20. }
  21. fmt.Println("processState PID:",processState.Pid())//获取PID
  22. fmt.Println("ProcessExit:",processState.Exited())//获取进程是否退出
  23. }

使用Cmd执行脚本

  1. package main
  2.  
  3. import(
  4. "fmt"
  5. "os/exec"
  6. )
  7.  
  8. func main(){
  9. shellPath :="/home/xx/test.sh"
  10. command :=exec.Command(shellPath)//初始化Cmd
  11. err := command.Start()//运行脚本
  12. ifnil!= err {
  13. fmt.Println(err)
  14. }
  15. fmt.Println("Process PID:",command.Process.Pid)
  16. err = command.Wait()//等待执行完成
  17. ifnil!= err {
  18. fmt.Println(err)
  19. }
  20. fmt.Println("ProcessState PID:",command.ProcessState.Pid())
  21. }

获取命令返回值

实际上脚本或命令执行完后,会将结果返回到ProcessState中的status去, 但是status不是export的,所以我们需要通过一些手段将脚本返回值从syscall.WaitStatus找出来

  1. ProcessState定义
  2. type ProcessStatestruct{
  3. pid int// The process's id.
  4. status syscall.WaitStatus// System-dependent status info.
  5. rusage *syscall.Rusage
  6. }

对于上面使用Cmd的例子,可以在进程退出后可以通过以下语句获取到返回值

  1. fmt.Println("Exit Code",command.ProcessState.Sys().(syscall.WaitStatus).ExitStatus())

使用Process方式的也可以通过对ProcessState通过相同的方式获取到返回结果。

仔细看文档,一切都包含在里面

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-JxX7A6Qq62b0300745376.jpeg

  • 发表于 2021-10-30 09:11
  • 阅读 ( 1393 )
  • 分类:Golang

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章