C#からPythonのコードをパス指定で呼び出して、その出力結果を受け取る方法を検証しました。
ちなみにIronPythonというライブラリを使う方法もあるようですが、今回はProcessクラスを使います。
今回使うpythonコード
2つのシンプルなpythonコードを用意します。
標準出力用のstd-out.py
通常の出力結果を表示するためのコード
# 標準出力
print("Hello, Call Python")
標準エラー出力用のstd-err.py
エラー出力を表示するためのコード
※trycatchで例外を検知しても、print()で出力したらC#では標準出力として取得されます。エラーかどうかを判別するために、標準出力と標準エラー出力を使い分けるようにしましょう。
import sys
# 標準エラー(stderr)へ出力
sys.stderr.write('error occured')
※下記の設定を行わないと、ビルドしたフォルダにpythonコードがコピーされないので忘れずに行います。
- ビルドアクション:コンテンツ
- 出力ディレクトリにコピー:新しい場合はコピーする

Processクラスを使って実装
using System.Diagnostics;
using (Process process = new Process())
{
process.StartInfo = new ProcessStartInfo("python")
{
// std-out.py か std-err.pyを指定
Arguments = "std-out.py",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
};
process.Start();
string output = process.StandardOutput.ReadToEnd();
string err = process.StandardError.ReadToEnd();
process.WaitForExit();
Console.WriteLine($"standard output : {output}");
Console.WriteLine($"standard error : {err}");
}
ProcessStartInfoの引数に実行するファイルのパス(~/python.exe)を渡します。環境変数に設定しているため、pythonを指定しています。
Argumentsに実行したいpythonコードのパスを指定します。今回はプロジェクトのルートディレクトリに置いているので、ファイル名だけ指定しています。
RedirectStandardOutputはtrueに設定します。pythonの標準出力をC#で取得できるようにするためです。
RedirectStandardErrorはtrueに設定します。pythonの標準エラー出力をC#で取得できるようにするためです。
実行結果
Argumentsにstd-out.pyを渡した結果
print()の結果が、標準出力として受け取れていることが確認できます。

Argumentsにstd-err.pyを渡した結果
sys.stderr.write()の結果が、標準エラー出力として受け取れていることが確認できます。
