golang如何执行脚本?在golang标准库中提供了两种方式可以用来启动进程调用脚本
第一种是在os库中的Process类型,Process类型包含一系列方法用来启动进程并对进程进行操作(参考: https://golang.org/pkg/os/#Process)
第二种是在os/exec库种通过Cmd类型的各个函数实现对脚本的调用,实际上Cmd是对Process中各种方法的高层次封装(参考: https://golang.org/pkg/os/exec/)
示例 使用Process执行脚本
- package main
- import(
- "fmt"
- "os"
- )
- func main(){
- shellPath :="/home/xx/test.sh"
- argv := make([]string,1)
- attr :=new(os.ProcAttr)
- newProcess,err := os.StartProcess(shellPath,argv,attr)//运行脚本
- if err !=nil{
- fmt.Println(err)
- }
- fmt.Println("Process PID",newProcess.Pid)
- processState,err := newProcess.Wait()//等待命令执行完
- if err !=nil{
- fmt.Println(err)
- }
- fmt.Println("processState PID:",processState.Pid())//获取PID
- fmt.Println("ProcessExit:",processState.Exited())//获取进程是否退出
- }
使用Cmd执行脚本
- package main
- import(
- "fmt"
- "os/exec"
- )
- func main(){
- shellPath :="/home/xx/test.sh"
- command :=exec.Command(shellPath)//初始化Cmd
- err := command.Start()//运行脚本
- ifnil!= err {
- fmt.Println(err)
- }
- fmt.Println("Process PID:",command.Process.Pid)
- err = command.Wait()//等待执行完成
- ifnil!= err {
- fmt.Println(err)
- }
- fmt.Println("ProcessState PID:",command.ProcessState.Pid())
- }
获取命令返回值
实际上脚本或命令执行完后,会将结果返回到ProcessState中的status去, 但是status不是export的,所以我们需要通过一些手段将脚本返回值从syscall.WaitStatus找出来
- ProcessState定义
- type ProcessStatestruct{
- pid int// The process's id.
- status syscall.WaitStatus// System-dependent status info.
- rusage *syscall.Rusage
- }
对于上面使用Cmd的例子,可以在进程退出后可以通过以下语句获取到返回值
- fmt.Println("Exit Code",command.ProcessState.Sys().(syscall.WaitStatus).ExitStatus())
使用Process方式的也可以通过对ProcessState通过相同的方式获取到返回结果。
仔细看文档,一切都包含在里面
如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。