Heim >Backend-Entwicklung >Golang >Wie führe ich Piped-Befehle in Go mit „exec.Command()' korrekt aus?

Wie führe ich Piped-Befehle in Go mit „exec.Command()' korrekt aus?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-27 19:15:12172Durchsuche

How to Correctly Execute Piped Commands in Go using `exec.Command()`?

Befehle mit Pipes in Go mit exec.Command() ausführen

Wenn Sie versuchen, einen Befehl auszuführen, der Piping beinhaltet, wie zum Beispiel „ps cax | grep myapp“, Wenn Sie exec.Command("ps", "cax | grep myapp").Output() verwenden, kann es sein, dass Sie auf den Exit-Status 1 stoßen Fehler.

Um solche Befehle effektiv zu verarbeiten, besteht eine idiomatischere Lösung darin, mehrere exec.Command-Instanzen zu verwenden und ihre Eingabe- und Ausgabeströme zu verbinden.

Hier ist eine Aufschlüsselung der Funktionsweise des idiomatischen Ansatzes:

  1. Erstellen Sie die Befehle: Initialisieren Sie separate exec.Command-Instanzen für jeden Befehl in der Pipeline, wie in diesem Fall „ps“ und „grep“.
  2. Verbinden Sie die Streams: Verwenden Sie die Methoden StdoutPipe und Stdin, um die Standardausgabe von „ps“ zu verbinden "-Befehl an die Standardeingabe des Befehls „grep".
  3. Starten Sie den ersten Befehl: Starten Sie den ersten Befehl in der Pipeline, normalerweise den einer, der für die Ausgabe verantwortlich ist, in unserem Beispiel „ps“.
  4. Erfassen Sie die Ausgabe: Warten Sie, bis der zweite Befehl abgeschlossen ist, und rufen Sie seine Ausgabe mit der Output-Methode ab.

Mit diesem Ansatz können Sie Befehle, die eine Verkettung über Pipes erfordern, effektiv ausführen und so die ordnungsgemäße Verarbeitung von Eingabe- und Ausgabeströmen sicherstellen.

Das obige ist der detaillierte Inhalt vonWie führe ich Piped-Befehle in Go mit „exec.Command()' korrekt aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn