国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ バックエンド開(kāi)発 Golang Go でシェル コマンドからリアルタイム出力を取得して処理する方法は?

Go でシェル コマンドからリアルタイム出力を取得して処理する方法は?

Dec 11, 2024 am 04:40 AM

How to Retrieve and Process Real-Time Output from Shell Commands in Go?

シェル コマンドに対する Go でのリアルタイム出力取得

Golang では、os/exec パッケージがシェル コマンドを?qū)g行する手段を提供します。ただし、これらのコマンドがリアルタイムの出力や進(jìn)行狀況の更新を返す場(chǎng)合、その情報(bào)を動(dòng)的に取得して処理する必要があります。これを?qū)g現(xiàn)する方法は次のとおりです。

Go でシェル コマンドのリアルタイム出力をキャプチャして処理するには、次のアプローチを検討してください:

package main</p>
<p>import (</p>
<pre class="brush:php;toolbar:false">"bufio"
"fmt"
"io"
"os"
"os/exec"
"strings"

)

func main() {

cmdName := "ffmpeg -i t.webm  -acodec aac -vcodec libx264  cmd1.mp4"
cmdArgs := strings.Fields(cmdName)

cmd := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
stderr, _ := cmd.StderrPipe()
cmd.Start()
go printProgress(stderr)
cmd.Wait()

}

// stderr が新しい行を取得したときに処理された情報(bào)を出力します
func printProgress(stderr io.ReadCloser) {

r := bufio.NewReader(stderr)
for {
    line, _, err := r.ReadLine()
    if err != nil {
        fmt.Println("error in reading from stderr:", err)
        break
    }

    // Process the line (e.g., extract the progress percentage)
    percentage, err := extractPercentage(string(line))
    if err != nil {
        fmt.Println("error in extracting percentage:", err)
        continue
    }

    // Print the updated progress ratio
    fmt.Printf("%s%%", percentage)
}

}

// extractPercentage は ffmpeg の行を解析します
// これは質(zhì)問(wèn)の出力形式を想定しています (例: "frame=... size=... time=... bitrate=...")
func extractPercentage(line string) (string, error) {

parts := strings.Split(line, " ")
if len(parts) < 4 {
    return "", fmt.Errorf("invalid line format: %s", line)
}

size := parts[2]
sizeUnits := []string{"B", "kB", "MB", "GB", "TB", "PB"}
for i, unit := range sizeUnits {
    if strings.HasSuffix(size, unit) {
        factor := float64(1 << (10 * i))
        sizeBytes, err := strconv.ParseFloat(strings.TrimSuffix(size, unit), 64)
        if err != nil {
            return "", err
        }

        percentage := (sizeBytes / factor) / 100
        return strconv.FormatFloat(percentage, 'f', 2, 64), nil
    }
}

return "", fmt.Errorf("unknown size unit: %s", size)

}

このアプローチでは、パイプを使用して、コマンドの stderr ストリームからリアルタイム出力を取得します。出力を継続的に読み取って処理し、進(jìn)行狀況の情報(bào)を抽出して動(dòng)的に印刷します。この例の extractPercentage 関數(shù)は、質(zhì)問(wèn)で言及されている特定の形式を想定して、ffmpeg 出力からパーセンテージを抽出することに注意してください。これは、シェル コマンドの特定の出力形式に基づいて調(diào)整する必要がある場(chǎng)合があります。

以上がGo でシェル コマンドからリアルタイム出力を取得して処理する方法は?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOの構(gòu)造インスタンスでメソッドを呼び出すにはどうすればよいですか? GOの構(gòu)造インスタンスでメソッドを呼び出すにはどうすればよいですか? Jun 24, 2025 pm 03:17 PM

GO言語(yǔ)では、構(gòu)造メソッドを呼び出すには、最初に構(gòu)造と受信機(jī)を結(jié)合する方法を定義し、ポイント番號(hào)を使用してアクセスする必要があります。構(gòu)造の長(zhǎng)方形を定義した後、メソッドは値受信機(jī)またはポインターレシーバーを介して宣言できます。 1。func(rrectangle)領(lǐng)域()intなどの値受信機(jī)を使用し、rect.area()を介して直接呼び出します。 2.構(gòu)造を変更する必要がある場(chǎng)合は、FUNC(r*長(zhǎng)方形)setWidth(...)などのポインターレシーバーを使用し、GOはポインターと値の変換を自動(dòng)的に処理します。 3.構(gòu)造を埋め込むと、埋め込まれた構(gòu)造の方法が改善され、外側(cè)の構(gòu)造を介して直接呼び出すことができます。 4。GOは、Getter/Setterを使用する必要はありません。

Golangサービスを既存のPythonインフラストラクチャと統(tǒng)合するための戦略 Golangサービスを既存のPythonインフラストラクチャと統(tǒng)合するための戦略 Jul 02, 2025 pm 04:39 PM

統(tǒng)合されたservicesと統(tǒng)合されたpothonistoninfrastructure、userestapisorgrpcforinter-servicecommunication、goandpythonappstoStoStosandizedprotocols.1.userestapis(Frameworkslikeginingoand flaskinpython)またはuserestapisを許可します

時(shí)間パッケージを使用して、GOの時(shí)間と期間で動(dòng)作するにはどうすればよいですか? 時(shí)間パッケージを使用して、GOの時(shí)間と期間で動(dòng)作するにはどうすればよいですか? Jun 23, 2025 pm 11:21 PM

GOの時(shí)間パッケージは、現(xiàn)在の時(shí)刻の取得、時(shí)刻差の計(jì)算、処理時(shí)間ゾーン、スケジューリング、睡眠操作など、処理時(shí)間と期間の機(jī)能を提供します?,F(xiàn)在の時(shí)間を取得するには、time.now()を使用して時(shí)間構(gòu)造を取得し、年()、月()、day()、およびその他の方法を通じて特定の時(shí)間情報(bào)を抽出できます。 Format( "2006-01-0215:04:05")を使用して、時(shí)間文字列をフォーマットします。時(shí)差を計(jì)算するときは、sub()またはonsy()を使用して持続時(shí)間オブジェクトを取得し、秒()、minutes()、およびhours()を通じて対応するユニットに変換します。

Web APIのGolangとPythonのパフォーマンスの違いを理解する Web APIのGolangとPythonのパフォーマンスの違いを理解する Jul 03, 2025 am 02:40 AM

Golangofferssuperiorporformance、nativeconconcurrencyviagoroutines、および効率的なresourceusage、makingitidealforhigh-raffic、low-latencyapis;

GOの條件に基づいてコードを?qū)g行するためのステートメントの場(chǎng)合、どのように使用しますか? GOの條件に基づいてコードを?qū)g行するためのステートメントの場(chǎng)合、どのように使用しますか? Jun 23, 2025 pm 07:02 PM

Ingo、ifstatementementecutecodebasedonconditions.1.BasicsTructurerunSablockifaconditionistrue、例えば、Ifx> 10 {...} dlesfalseconditions、例えば、else {...}。3.ElseifChainsMultipLeconditions、例えば、Elseifx == 10 {...}

Goは同時(shí)実行をどのようにサポートしますか? Goは同時(shí)実行をどのようにサポートしますか? Jun 23, 2025 pm 12:37 PM

GoHandlesConcurrencyUsingGoroutinesAndChannels.1.GoroutinesAreLightWeightFunctionsManaged byThegoruntime

GOのコードの重要なセクションを保護(hù)するために、Lock()およびUnlock()メソッドを使用するにはどうすればよいですか? GOのコードの重要なセクションを保護(hù)するために、Lock()およびUnlock()メソッドを使用するにはどうすればよいですか? Jun 23, 2025 pm 08:37 PM

GOの重要な領(lǐng)域を保護(hù)する標(biāo)準(zhǔn)的な方法は、sync.mutexのLock()およびUnlock()メソッドを使用することです。 1.ミューテックスを宣言し、保護(hù)するデータでそれを使用します。 2。クリティカルエリアに入る前にlock()を呼び出して、1つのゴルウチンのみが共有リソースにアクセスできるようにします。 3。DeferunLock()を使用して、デッドロックを避けるためにロックが常にリリースされることを確認(rèn)します。 4.パフォーマンスを向上させるために、重要なエリアでの操作を短縮してみてください。 5。より多くの読み取りとより少ない書き込みのシナリオの場(chǎng)合、Sync.rwmutexを使用し、rlock()/runlock()を介して操作を読み取り、lock()/lock()を介して操作を書き込み、同時(shí)効率を向上させます。

go(&、|、 ^、&、&、、)でビットワイズ演算子を使用するにはどうすればよいですか? go(&、|、 ^、&、&、、)でビットワイズ演算子を使用するにはどうすればよいですか? Jun 23, 2025 pm 01:57 PM

ビットオペレーターを使用して、GO言語(yǔ)で特定のビットの整數(shù)を操作します。これは、フラグビット、基礎(chǔ)となるデータ、または最適化操作に適しています。 1。使用&(ビットごと)特定のビットが設(shè)定されているかどうかを確認(rèn)します。 2。使用します

See all articles