web-dev-qa-db-fra.com

Comment effacer l'écran du terminal dans Go?

Existe-t-il une méthode standard dans Golang pour effacer l'écran du terminal lorsque j'exécute un script GO? ou je dois utiliser d'autres bibliothèques?

34
Anish Shah

Vous devez définir une méthode claire pour chaque système d'exploitation, comme celui-ci. Lorsque le système d'exploitation de l'utilisateur n'est pas pris en charge, il panique

package main

import (
    "fmt"
    "os"
    "os/exec"
    "runtime"
    "time"
)

var clear map[string]func() //create a map for storing clear funcs

func init() {
    clear = make(map[string]func()) //Initialize it
    clear["linux"] = func() { 
        cmd := exec.Command("clear") //Linux example, its tested
        cmd.Stdout = os.Stdout
        cmd.Run()
    }
    clear["windows"] = func() {
        cmd := exec.Command("cmd", "/c", "cls") //Windows example, its tested 
        cmd.Stdout = os.Stdout
        cmd.Run()
    }
}

func CallClear() {
    value, ok := clear[runtime.GOOS] //runtime.GOOS -> linux, windows, darwin etc.
    if ok { //if we defined a clear func for that platform:
        value()  //we execute it
    } else { //unsupported platform
        panic("Your platform is unsupported! I can't clear terminal screen :(")
    }
}

func main() {
    fmt.Println("I will clean the screen in 2 seconds!")
    time.Sleep(2 * time.Second)
    CallClear()
    fmt.Println("I'm alone...")
}

(l'exécution de la commande provient de la réponse de @merosss)

41
mraron

Vous pouvez le faire avec codes d'échappement ANSI :

print("\033[H\033[2J")

Mais sachez qu’il n’existe pas de solution multi-plateforme à toute épreuve pour une telle tâche. Vous devez vérifier la plate-forme (Windows/UNIX) et utiliser les codes cls/clear ou d'échappement.

20
Kavu

Utilisez goterm

package main

import (
    tm "github.com/buger/goterm"
    "time"
)
func main() {
    tm.Clear() // Clear current screen
    for {
        // By moving cursor to top-left position we ensure that console output
        // will be overwritten each time, instead of adding new.
        tm.MoveCursor(1, 1)
        tm.Println("Current Time:", time.Now().Format(time.RFC1123))
        tm.Flush() // Call it every time at the end of rendering
        time.Sleep(time.Second)
    }
}
8
Kasinath Kottukkal

Comme signalé ici vous pouvez utiliser les trois lignes suivantes pour effacer l'écran:

c := exec.Command("clear")
c.Stdout = os.Stdout
c.Run()

N'oubliez pas d'importer "os" et "os/exec".

4
merosss

N'utilisez pas l'exécution de commande pour cela.

Au lieu de cela, j'ai également créé un petit paquet utilitaire. Cela fonctionne sur Windows et les invites de commande Bash.

???? https://github.com/inancgumus/screen

package main

import (
    "fmt"
    "time"
    "github.com/inancgumus/screen"
)

func main() {
    // Clears the screen
    screen.Clear()

    for {
        // Moves the cursor to the top left corner of the screen
        screen.MoveTopLeft()

        fmt.Println(time.Now())
        time.Sleep(time.Second)
    }
}
0
Inanc Gumus

Facile pour les systèmes nix:

fmt.Println("\033[2J")
0
CommonSenseCode