Help us understand the problem. What is going on with this article?

C#からPythonスクリプトを呼び出す

More than 1 year has passed since last update.

はじめに

唐突に画像と動画を加工してみたくなり、VisualStudio2017でPython3/OpenCVを使ってみました。

普段はC#を使っているので、使い慣れたC#からPythonスクリプトを呼び出せないか試してみました。

参考資料

下記のサイトを参考に実装しています。
Inter-process communication between C# and Python

実装方法

言語 実装する処理
Python 「第1引数の値」 + 「第2引数の値」 を出力する
C# 「第1引数の値」と「第2引数の値」を指定して、Pythonスクリプトを呼び出し、結果を出力する

1. Python側を実装

AdditionSample.py
import sys

if len(sys.argv) == 3:
    firstArgument = int(sys.argv[1]) 
    secondArgument = int(sys.argv[2])
    print(firstArgument + secondArgument)
else:
    print('ArgumentException...')

2. C#側を実装

Sample.cs
class Program
{
    static void Main(string[] args)
    {
        //VisualStudioが利用しているインタープリターのパス
        var pythonInterpreterPath = @"C:\sample\path\Anaconda3\python.exe";

        //「1. Python側を実装」にて保存したスクリプトのパス
        var pythonScriptPath = @"C:\sample\path\AdditionSample.py";

        var arguments = new List<string>
        {
            pythonScriptPath ,
            "10",   //第1引数
            "20"    //第2引数
        };

        var process = new Process()
        {
            StartInfo = new ProcessStartInfo(pythonInterpreterPath)
            {
                UseShellExecute = false,
                RedirectStandardOutput = true,
                Arguments = string.Join(" ", arguments),
            },
        };

        process.Start();

        //python側でprintした内容を取得
        var sr = process.StandardOutput;
        var result = sr.ReadLine(); 

        process.WaitForExit();
        process.Close();

        Console.WriteLine("Result is ... " + result);
    }
}

実行結果

Result is ... 30

感想

この方法を使えば、C#とPythonを組み合わせた実装ができそうです。

しかし、この方法だとPython側でprintした内容を受け取ることしかできないようです。
また、指定したPythonスクリプトを実行するだけなので、自由にPython側の処理を呼べるというわけでもありません。

処理内容にもよると思いますが、Python側をWebAPI化して、処理結果をJSON形式で結果を返すのが一番使いやすそうな気もします。

kaysquare1231
自習した内容等の備忘を書いていきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away