Как в программе на c# вызвать функцию python и получить её результат?

Нужно написать программу на c# (или хотя бы на c++), чтобы можно было подгрузить скрипт на питоне, вызвать из него функцию, передать в неё массив (ну или другие данные), функция отработала и вернула в основную программу результат. Вариант с вызовом интерпретатора и передачей ему параметров не подходит. Нужно быстродействие, на сколько это можно конечно
  • Вопрос задан
  • 3652 просмотра
Решения вопроса 1
c#
using Process process = Process.Start(new ProcessStartInfo {
	FileName = "python",
	Arguments = @"path\pyscript.py",
	UseShellExecute = false,
	RedirectStandardInput = true,
	RedirectStandardOutput = true
});

int[] arr = { 1, 2, 3, 4, 5, 6 };

using BinaryWriter writer = new BinaryWriter(process.StandardInput.BaseStream);
Array.ForEach(arr, writer.Write);
writer.Flush();

using BinaryReader reader = new BinaryReader(process.StandardOutput.BaseStream);
int result = reader.ReadInt32();

Console.WriteLine(result);

Console.ReadKey(false);


python:
import os
import sys

stdin = sys.stdin.buffer
stdout = sys.stdout.buffer


def get_int_list():
    stdin.seek(0, os.SEEK_END)
    n = stdin.tell() // 4
    arr = [0] * n

    for i in range(n):
        arr[i] = int.from_bytes(stdin.read(4), byteorder='little')

    return arr


def write_int(i: int):
    stdout.write(i.to_bytes(4, byteorder='little'))


nums = get_int_list()

result = sum(nums)

write_int(result)


Результат: 21
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
shurshur
@shurshur
Сисадмин, просто сисадмин...
Можно смотреть в сторону IronPython. Тут пример: https://www.red-gate.com/simple-talk/dotnet/net-fr...
Ответ написан
vabka
@vabka Куратор тега C#
Токсичный шарпист
Если нужно быстродействие, на сколько возможно, то из вариантов - реализовать этот алгоритм на C# или C++.
В крайнем случае - подключить python, как библиотеку и работать с ней: https://habr.com/ru/post/168083/
Ответ написан
Комментировать
Вызов интерпретатора довольно нетороплив. Вместо этого способа имеет смысл воспользоваться Python.NET
Или методом из документации
https://docs.python.org/3/extending/embedding.html
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы