[解決済み] Go で子プロセスの標準出力パイプをリダイレクトする
2022-10-12 18:04:36
質問
Goでプログラムを書いていて、サーバーのようなプログラム(これもGo)を実行するようにしています。子プログラムの標準出力が、親プログラムを起動したターミナルウィンドウに表示されるようにしたいのですが、どうすればよいでしょうか。これを実現するひとつの方法として
cmd.Output()
関数を使うことですが、これはプロセスが終了した後にしか標準出力を表示しません。(このサーバーのようなプログラムは長い時間実行されるので、ログ出力を読みたいので問題です)
変数
out
は
type io.ReadCloser
であり、私のタスクを達成するためにそれをどうすればよいのかわかりませんし、このトピックについてウェブ上で役に立つものを見つけることができません。
func main() {
cmd := exec.Command("/path/to/my/child/program")
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
//fmt.Println(out)
cmd.Wait()
}
コードの説明
Println
関数を使用すると、コードがコンパイルできるようになることは知っています。
Println(out io.ReadCloser)
は意味のある関数ではありません。
(を出力します)。
&{3 |0 <nil> 0}
) この2行は、コードをコンパイルするために必要なだけです。
どのように解決するのですか?
子プログラムの標準出力が、親プログラムを起動したターミナル ウィンドウに表示させたいです。
パイプやゴルーチンをいじる必要はありません、これは簡単です。
func main() {
// Replace `ls` (and its arguments) with something more interesting
cmd := exec.Command("ls", "-l")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()
}
関連
-
[解決済み] ファイルにログを記録し、標準出力に印刷するためのロガー設定
-
[解決済み] Bashで標準出力と標準エラーの両方をファイルにリダイレクトして追記する方法
-
[解決済み] 出力をファイルや標準出力にリダイレクトする方法
-
[解決済み] 標準出力ではなく標準エラー出力にパイプを通すにはどうしたらいいですか?
-
[解決済み】Pythonでstdoutをファイルにリダイレクトする?
-
[解決済み] サーバーでSSLが有効になっていない
-
[解決済み] ログをファイルに書き出す方法
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] Goでスライスを逆に反復処理する方法はありますか?
-
[解決済み] Goのargv[0]に相当するものは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?
-
[解決済み] 単一値コンテキストにおける複数値
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
-
[解決済み] スライスを格納する interface{} 上の範囲
-
[解決済み] golangでは、マップから値のスライスを取得する良い方法はありますか?
-
[解決済み] マップから構造体への変換
-
[解決済み] ゴルーチンのスタックトレースをダンプするには?
-
[解決済み] スライスを変数入力として渡すには?
-
[解決済み] Goのargv[0]に相当するものは何ですか?
-
[解決済み] あるプログラムの依存ファイルをすべて取得する方法