从Electron(或Node.js)生成(和杀死)Uvicorn/FastAPI后端

1 人关注

我正在使用FastAPI(和Uvicorn)为一个Electron应用程序构建一个Python后端。我同时在macOS和Windows上开发,所以我在寻找一个跨平台的解决方案,以解决以下问题。

我怎样才能从Node.js(特别是我的Electron应用程序的 electron.js 脚本)生成并优雅地杀死一个python Uvicorn服务器?

我能够启动服务器的唯一方法是用 exec 而不是 spawn 。因此,这就可以了。

const { spawn, exec, execFile } = require("child_process");
function launchPython() {
  pythonProcess = exec(
    "C:\\Users\\user2\\miniconda3\\envs\\myenv\\python.exe .\\py_src\\main.py"
  console.log("Python process started in dev mode")
  return pythonProcess;

But this does not:

function launchPython() { pythonProcess = spawn( "C:\\Users\\user2\\miniconda3\\envs\\myenv\\python.exe .\\py_src\\main.py" console.log("Python process started in dev mode") return pythonProcess;

.\py_src\main.py looks like this:

import uvicorn
if __name__ == "__main__":
    uvicorn.run(
        "app.api:app", 
        host="0.0.0.0", 
        port=8000, 
        reload=True

另外,在退出Electron应用程序时,Uvicorn服务器没有被杀死。我的主electron.js文件中的 "退出 "代码如下。

app.on("window-all-closed", function () {
  if (process.platform !== "darwin") {
    pythonProcess.kill();
    app.quit();
    return

因此,有两个主要问题。