Go での外部コマンドの STDIN への書き込み
Go では、外部コマンドを実行するときに、STDIN 経由で入力を提供する必要があることがよくあります。この記事では、複数の入力フィールドを必要とするコマンドを処理するときに入力を STDIN に書き込む手法について説明します。
「login」コマンドのように、ユーザー名とパスワードを順番に入力するコマンドを考えてみましょう。これらの入力をプログラムで提供するには、コマンドの STDIN に書き込む必要があります。
最初のアプローチは、次のコードに示すように、入力フィールドを手動で処理することでした。
<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>
ただし, この方法ではプログラムによる入力はできません。解決策は、bytes.Buffer を利用して入力を組み立てることにあります。改良されたコードは次のとおりです。
<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>
bytes.Buffer は文字バッファーとして機能します。ユーザー名とパスワードを改行文字で区切って記述することで、基本的には外部コマンドが順番に読み取る一連の入力を構築します。コマンドの Stdin フィールドにはバッファが割り当てられ、入力がコマンドのプロセスに確実に供給されるようにします。
このアプローチにより、複数の入力フィールドを持つ外部コマンドへの自動入力が可能になり、Go と他のコマンド間の対話が簡素化されます。ラインツール。
以上がGo の外部コマンドに複数の入力フィールドをプログラム的に提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。