【问题标题】:Python Script run from C# leaves Python exe running in background eating memory从 C# 运行的 Python 脚本使 Python exe 在后台运行,占用内存
【发布时间】: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)

【问题讨论】:

    标签: python c# process


    【解决方案1】:

    试试这个: 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. 以管理员身份运行代码

    【讨论】:

    • 约翰,谢谢你的建议。我会记住这一点,但我希望有一些更清洁的东西可以杀死刚刚启动的进程,就像我杀死所有进程一样,我也会杀死一些活动的 python.exe。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 2018-06-21
    • 2020-03-11
    • 2017-07-09
    相关资源
    最近更新 更多