我正在使用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
因此,有两个主要问题。