2012-08-23 12 views
5

Bir Go programından bir dış düzenleyicinin nasıl başlatılacağını anlamaya çalışıyorum, kullanıcının düzenleyiciyi kapatmasını bekleyin ve ardından programın yürütülmesini sürdürün. Ben Programı çalıştırdığınızdaBir Go programından harici bir düzenleyiciyi başlatmaya çalışıyorum

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.") 
    } 

} 

, bu alın:

[email protected]:~/code/go/src/launcheditor$ go run launcheditor.go 
2012/08/23 10:50:37 Error while editing. Error: exit status 1 
[email protected]:~/code/go/src/launcheditor$ 

Ben de exec.Run kullanarak denedim() yerine exec SO cevap this dayanarak, Şu anda bu kodu var. Başlat(), ancak bu (ya da aynı yerde başarısız olsa da) işe yaramıyor.

Vim yerine Gvim kullanırsam çalışabilirim, ancak hem Vim hem de nano ile çalışmayı reddeder. Bence harici bir pencere oluşturmak yerine terminal emülatörü içinde çalışan Vim ve nano ile ilgili. cmd := exec.Command("vim", fpath) yılında Burada

cevap

7

.Std (err | | dışarı). Bunun gibi (nesne cmd denir varsayarak):

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

Kredi bu çözümü için freenode # go-fındık adamlardan gider.

1

, daha fazla veya daha az yapıyoruz:

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

Kabuk PATH ortam değişkeni kullanır exec.Command buna gerek yoktur. vim ikili dosyasını aramalı ve tam yolunu exec.Command'a iletmelisiniz. exec.LookPath sizin için yapar.

+0

Denedim, ancak hala çalışmıyor. Ayrıca, bu sadece "gvim" eserlerinin kullanımıyla ilgili açıklama olamaz. – cgt

+1

İşaretli. Haklısın. Sebebini henüz bilmiyorum. Içine bakmak. – zzzz

2

Bu benim için çalışıyor ama (baskısında sonra otomatik olarak kapanacak) Başka bir terminal açıp dezavantajı vardır: Eğer os Cmd nesne üzerinde Stdin, stdout ve stderr ayarlamak zorunda Görünüşe

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