17
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

#はじめに
唐突に画像と動画を加工してみたくなり、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形式で結果を返すのが一番使いやすそうな気もします。

17
42
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?