ホームページ > バックエンド開発 > Golang > Go プログラム内で呼び出される Python 関数から戻り値を正常に取得するにはどうすればよいですか?

Go プログラム内で呼び出される Python 関数から戻り値を正常に取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-04 16:59:14
オリジナル
209 人が閲覧しました

How Can I Successfully Retrieve Return Values from Python Functions Called Within a Go Program?

Go からの Python 関数の呼び出しと戻り値の取得

Go プログラム内で Python ユーティリティを利用する必要があるシナリオでは、このガイドは Python 関数の呼び出しを支援します。

で提供されている元のコード質問:

package main

import "os/exec"
import "fmt"

func main() {
     fmt.Println("here we go...")
     program := "python"
     arg0 := "-c"
     arg1 := fmt.Sprintf("'import pythonfile; print pythonfile.cat_strings(\"%s\", \"%s\")'", "foo", "bar")
     cmd := exec.Command(program, arg0, arg1)
     fmt.Println("command args:", cmd.Args)
     out, err := cmd.CombinedOutput()
     if err != nil {
         fmt.Println("Concatenation failed with error:", err.Error())
     return
     }
     fmt.Println("concatentation length: ", len(out))
     fmt.Println("concatenation: ", string(out))
     fmt.Println("...done")
}
ログイン後にコピー

残念ながら、このコードでは空の戻り値が返されました。解決策は、Python コマンドから囲んでいるアポストロフィを削除することです:

package main

import "fmt"
import "os/exec"

func main() {
    cmd := exec.Command("python",  "-c", "import pythonfile; print pythonfile.cat_strings('foo', 'bar')")
    fmt.Println(cmd.Args)
    out, err := cmd.CombinedOutput()
    if err != nil { fmt.Println(err); }
    fmt.Println(string(out))
}
ログイン後にコピー

この変更により、Windows の EscapeArg 関数に関する興味深い詳細が明らかになります。この関数は、二重引用符の前にバックスラッシュを 2 つ追加し、二重引用符自体をエスケープすることでコマンド ライン引数を書き換えます。 。したがって、元のコードは Python コマンドを適切に実行するのではなく、本質的にエスケープしていました。囲んでいるアポストロフィを削除すると、正しいコマンドが Python に渡され、関数の戻り値が正常に取得されます。

以上がGo プログラム内で呼び出される Python 関数から戻り値を正常に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート