从C#运行的Python脚本使Python exe在后台内存中运行

2024-10-03 11:16:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个C#ASP.Net服务,该服务不断读取raspberry pis上的GPIO。这将读取输入端的管脚,并触发输出端的管脚。我的调用可以正常工作,但我的问题是,需要时,我每隔0.5秒调用一次Python脚本。e、 g读取输入将每0.5秒调用一次,但输出仅在需要时触发。我的问题是,每次调用都会启动一个新的Python.exe实例,并且在脚本运行时不会关闭它们。我尝试过python脚本中的各种退出,以及C#eg.process.Kill()中的一些退出,但是没有任何东西可以杀死python exe。附件是显示问题的任务管理器的图像。下面我将添加用于调用python脚本的代码和用于显示调用python脚本的读取输入脚本。我在中留下了一些评论,以便您可以看到我以前尝试过的内容。谢谢

enter image description here

调用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)

Tags: import脚本trueosvarsyspinenviron
1条回答
网友
1楼 · 发布于 2024-10-03 11:16:42

试试这个: 1.从以下位置下载PSTools:https://docs.microsoft.com/en-us/sysinternals/downloads/pskill 2.编写以下代码:

>       public static void killPython()
    {
        var killPython = new ProcessStartInfo();
        killPython.FileName = @"\Your_PSTools_Path\pskill.exe";
        //-t Kill the process and its descendants. 
        killPython.Arguments = "-t PID"; //process PID from Task Manager
        Process.Start(killPython);
    }
  1. 以管理员身份运行代码

相关问题 更多 >