2013-10-06 13 views
7

Ho provato un sacco di modi, comeCome posso cancellare la console con golang in windows?

package main 
import (
    "os" 
    "os/exec" 
) 

func main() { 
    c := exec.Command("cls") 
    c.Stdout = os.Stdout 
    c.Run() 
} 

e

C.system(C.CString("cls")) 

E la sequenza di escape non funziona né

+0

Dal momento che questo sarà del tutto dipenderà dal vostro sistema operativo e console, si dovrebbe aggiungere quale sistema operativo che si sta utilizzando. Se Windows sembra che tu debba fare una system() chiamata a "cls" come "cls" non è un eseguibile (che è ciò che aspetta exec) – ClojureMostly

+0

Capito, sono un principiante di Stack Overflow. Ho aggiunto il tag di Windows. –

risposta

9

Tutto ciò che serve è:

package main 

import (
"os" 
"os/exec" 
) 

func main() { 
    cmd := exec.Command("cmd", "/c", "cls") 
    cmd.Stdout = os.Stdout 
    cmd.Run() 
} 
+0

Sembra strano, ma il tuo codice funziona solo in Windows. Perché dovremmo chiamare il "cmd" con l'argomento "cls" invece di chiamare direttamente "cls". Comunque, grazie molte. –

+2

Il motivo è che "cls" è un comando incorporato nella "shell" DOS e non un eseguibile standalone. Quindi, quando digiti "cls", cancella semplicemente lo schermo della tua shell funzionante, ma non esegue mai un comando esterno. Quando esegui un comando in go, esegui i comandi direttamente e non attraverso una shell. HTH – ClojureMostly

11

Non c'è davvero nessun modo semplice per fare questo in un modo multipiattaforma usando le librerie standard.

termbox-go sembra essere una libreria che fornisce il controllo del terminale multipiattaforma. Probabilmente ce ne sono altri, ma è l'unico che ho usato e sembra funzionare bene.

Cancellare la console utilizzando sarebbe una questione di fare un Clear e quindi un Flush.

Vedere http://godoc.org/github.com/nsf/termbox-go per ulteriori dettagli.

Problemi correlati