Я разрабатываю C# ASP. Net Сервис, который постоянно читает GPIO на raspberry pis. Это считывает контакты для входов, а также запускает контакты для выходов. У меня работает вызов, но моя проблема в том, что я вызываю сценарии Python каждые 0,5 секунды, когда это необходимо. например, вход для чтения будет вызываться каждые 0,5 секунды, но выходы будут срабатывать только при необходимости. Моя проблема в том, что каждый вызов запускает новый экземпляр Python .exe и не закрывает их при запуске скрипта. Я пробовал все виды выходов из сценария python, а также некоторые из C#, например. process.Kill (), но ничего не убивает Python exe. Прилагается изображение диспетчера задач, чтобы показать проблему. Ниже я добавлю код, который использую для вызова сценария python, и сценарий чтения ввода, чтобы показать вызываемый мной сценарий python. Я оставил несколько комментариев, чтобы вы могли увидеть, что я пробовал ранее. Спасибо
Код для вызова Python Скрипт:
String exePath = SystemSettingDB.GetSettingValue("Python Executbale Path");
string holdPath = SystemSettingDB.GetSettingValue("Door Open Script Path");
var open = new ProcessStartInfo();
open.FileName = exePath;
var controllerIP = _controllerIP;
open.Arguments = $"\"{holdPath}\" \"{controllerIP}\" \"{_pin}\"";
open.UseShellExecute = false;
open.CreateNoWindow = true;
open.RedirectStandardOutput = true;
open.RedirectStandardError = true;
var process = Process.Start(open);
if (process != null)
{
process.Kill();
return true;
}
Python Скрипт для чтения входных данных
import sys
import os
from time import sleep
os.environ["PIGPIO_PORT"] = "8888"
os.environ["GPIOZERO_PIN_FACTORY"] = "pigpio"
from gpiozero import LED
os.environ["PIGPIO_ADDR"] = sys.argv[1]
gpio_pin = sys.argv[2]
door = LED(gpio_pin)
door._read()
print(door.value)
sys.exit(0)
#os._exit(-1)