Schreiben externer Befehle in Go in STDIN
In Go ist es bei der Ausführung externer Befehle häufig erforderlich, Eingaben über STDIN bereitzustellen. In diesem Artikel wird eine Technik zum Schreiben von Eingaben in STDIN untersucht, wenn es um Befehle geht, die mehrere Eingabefelder erfordern.
Betrachten wir einen Befehl, der nacheinander zur Eingabe eines Benutzernamens und eines Passworts auffordert, wie der Befehl „login“. Um diese Eingaben programmgesteuert bereitzustellen, müssen wir in die STDIN des Befehls schreiben.
Der ursprüngliche Ansatz bestand darin, die Eingabefelder manuell zu bearbeiten, wie im folgenden Code dargestellt:
<code class="go">login := exec.Command(cmd, "login") login.Stdout = os.Stdout login.Stdin = os.Stdin login.Stderr = os.Stderr err := login.Run() if err != nil { fmt.Fprintln(os.Stderr, err) }</code>
Allerdings , diese Methode erlaubt keine programmgesteuerte Eingabe. Die Lösung besteht darin, einen bytes.Buffer zum Zusammenstellen der Eingabe zu verwenden. Hier ist ein verbesserter Code:
<code class="go">login := exec.Command(cmd, "login") var b bytes.Buffer b.Write([]byte(username + "\n" + pwd + "\n")) login.Stdout = os.Stdout login.Stdin = &b login.Stderr = os.Stderr</code>
Der bytes.Buffer fungiert als Zeichenpuffer. Indem wir den Benutzernamen und das Passwort durch Zeilenumbrüche getrennt schreiben, erstellen wir im Wesentlichen eine Folge von Eingaben, die der externe Befehl der Reihe nach liest. Dem Stdin-Feld des Befehls wird der Puffer zugewiesen, um sicherzustellen, dass die Eingaben in den Prozess des Befehls eingespeist werden.
Dieser Ansatz ermöglicht die automatisierte Eingabe in externe Befehle mit mehreren Eingabefeldern und vereinfacht so die Interaktion zwischen Go und anderen Befehlen. Linienwerkzeuge.
Das obige ist der detaillierte Inhalt vonWie kann man in Go programmgesteuert mehrere Eingabefelder für einen externen Befehl bereitstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!