【发布时间】:2020-05-29 08:04:17
【问题描述】:
我正在开发一个 C# ASP.Net 服务,该服务不断读取树莓派上的 GPIO。这会读取输入引脚并触发输出引脚。我的电话可以正常工作,但我的问题是我需要时每 0.5 秒调用一次 Python 脚本。例如,读取输入将每 0.5 秒调用一次,但输出仅在需要时触发。我的问题是每次调用都会启动一个新的 Python.exe 实例,并且在运行脚本时它不会关闭它们。我已经尝试了 python 脚本的各种退出以及 C# 中的一些退出,例如。 process.Kill() 但没有什么会杀死 Python exe。附件是显示问题的任务管理器的图像。下面我将添加我用来调用 python 脚本和读取输入脚本的代码以显示我正在调用的 python 脚本。我留下了一些 cmets,所以你可以看到我之前尝试过的内容。谢谢
调用 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)
【问题讨论】: