亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試從Go程序中啟動外部編輯器

嘗試從Go程序中啟動外部編輯器

Go
守候你守候我 2021-05-05 10:58:01
我試圖弄清楚如何從Go程序中啟動外部編輯器,等待用戶關閉編輯器,然后繼續執行程序。基于這個答案,我目前有以下代碼:package mainimport (    "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 1chris@DPC3:~/code/go/src/launcheditor$ 我也嘗試使用exec.Run()代替exec.Start(),但似乎也不起作用(盡管它不會在同一地方失敗)。如果我使用Gvim而不是Vim,我可以使它工作,但是它拒絕與Vim和nano一起工作。我認為這與在終端仿真器中運行而不是創建外部窗口的Vim和nano有關。
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

很顯然,你必須設置Stdin,StdoutStderr在上Cmd對象os.Std(in|out|err)。像這樣(假設對象被稱為cmd):

cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

解決此問題的功勞歸功于freenode上#go-nuts上的家伙。


查看完整回答
反對 回復 2021-05-17
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

這對我有用,但是它的缺點是打開另一個終端(版本結束后會自動關閉):

cmd := exec.Command("/usr/bin/xterm", "-e", "vim "+fpath)


查看完整回答
反對 回復 2021-05-17
?
森欄

TA貢獻1810條經驗 獲得超5個贊

在中cmd := exec.Command("vim", fpath),您正在執行或多或少的操作:

$ PATH= vim foo.txt
bash: vim: No such file or directory
$

Shell使用PATH環境變量,exec.Command而不使用。您必須查找vim二進制文件并將其完整路徑傳遞給exec.Commandexec.LookPath為您做到這一點。


查看完整回答
反對 回復 2021-05-17
  • 3 回答
  • 0 關注
  • 247 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號