プロジェクトで複数の言語を使用する場合の一般的なタスクの 1 つは、ある言語から別の言語内で関数を呼び出す機能です。この場合、Go プログラムから Python 関数を呼び出し、その戻り値を取得する方法を検討しています。
最初の試みでは、次の Go コードは次のとおりでした。 used:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "-c", fmt.Sprintf("'import pythonfile; print pythonfile.cat_strings(\"%s\", \"%s\")'", "foo", "bar")) out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) return } fmt.Println(string(out)) }
ただし、このアプローチでは、Python 関数からの戻り値が Go プログラムでキャプチャされないという問題が発生しました。出力には空の文字列 " " が表示されました。
問題は、Python コマンドの形式が原因で発生しました。コマンド自体を引用符で囲んでいるため、Python インタープリターはコマンドを引数のリストではなく単一の文字列として扱っていました。
この問題を解決するには、コマンドを引用符で囲みました。削除されました。次の Go コードは、解決策を示しています。
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("python", "-c", "import pythonfile; print pythonfile.cat_strings('foo', 'bar')") out, err := cmd.CombinedOutput() if err != nil { fmt.Println(err) return } fmt.Println(string(out)) }
引用符を削除すると、コマンドが意図したとおりに実行され、Python 関数からの戻り値を Go プログラムで適切にキャプチャできるようになります。
以上がGo プログラムによって呼び出された Python 関数から戻り値を正常に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。