Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 尝试从Go程序中启动外部编辑器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我试图找出如何从Go程序中启动外部编辑器,等待用户关闭编辑器,然后继续执行该程序.根据 this SO答案,我目前有这个代码: package main import ( "log" "os" "os/exec" ) func main() { fpath := os.TempDir() + "/thetemporaryfile.txt" f, err
我试图找出如何从Go程序中启动外部编辑器,等待用户关闭编辑器,然后继续执行该程序.根据 this SO答案,我目前有这个代码
package main

import (
    "log"
    "os"
    "os/exec"
)

func main() {
    fpath := os.TempDir() + "/thetemporaryfile.txt"
    f,err := os.Create(fpath)
    if err != nil {
        log.Printf("1")
        log.Fatal(err)
    }
    f.Close()

    cmd := exec.Command("vim",fpath)
    err = cmd.Start()
    if err != nil {
        log.Printf("2")
        log.Fatal(err)
    }
    err = cmd.Wait()
    if err != nil {
        log.Printf("Error while ediTing. Error: %v\n",err)
    } else {
        log.Printf("successfully edited.")
    }

}

当我运行程序时,我得到了这个:

chris@DPC3:~/code/go/src/launcheditor$go run launcheditor.go 
2012/08/23 10:50:37 Error while ediTing. Error: exit status 1
chris@DPC3:~/code/go/src/launcheditor$

我也尝试使用exec.Run()而不是exec.Start(),但这似乎也不起作用(然它不会在同一个地方失败).

如果我使用Gvim而不是Vim,我可以让它工作,但它拒绝使用Vim和nano.我认为这与在终端仿真器内运行的Vim和​​nano有关,而不是创建一个外部窗口.

解决方法

显然,你必须将Cmd对象上的Stdin,Stdout和Stderr设置为os.Std(in | out | err).像这样(假设对象被称为cmd):
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

解决这个问题的成果归功于freenode上的#go-nuts.

大佬总结

以上是大佬教程为你收集整理的linux – 尝试从Go程序中启动外部编辑器全部内容,希望文章能够帮你解决linux – 尝试从Go程序中启动外部编辑器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。