Flask仅在调试模块中按预期工作

2024-09-28 21:42:09 发布

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

我正在用electron和flask创建一个桌面应用程序。当我试图发送选定的路径时(由用户通过文件夹选择对话框选择)。用电子我可以得到完整的路径,而不是像C:/fake_路径。这是因为electron通过.files[0].path)向python提供了完整的路径,我从未收到响应或捕捉到错误(main.logPython在rq函数后面的函数中要么不调用。在

但是,如果我在python文件中包含app.debug = True以打开Flask调试器,它将按预期运行并输出路径。实际上,除非我将python代码置于调试模式,否则根本无法访问它。在

edit:我知道这是真的,因为我尝试过运行python代码,而不仅仅是返回(比如创建一个新文件),而且它从未运行过。在

编辑2:这个问题似乎与管理员js文件。如果我试图在主.js如果我在管理员js我没有收到上述回复。

希望我已经提供了足够的信息。如果你还需要什么,请告诉我。在

很抱歉JavaScript代码的格式问题,我对它很陌生,所以我只是把它放到脏标记中去清理一下。在

调用JavaScript代码(管理员js)在

const remote = require("electron").remote;
const main = remote.require("./main.js");
var importButton = document.getElementById("importButton");
if (importButton.addEventListener) {
    importButton.addEventListener("click", importPackages, false);
} else if (importButton.attachEvent) {
    importButton.attachEvent("onclick", importPackages);
}

function importPackages() {
    var importDirectory = document.getElementById("importDirectory").files[0].path;
    var rq = require('request-promise');
    var mainAddr = 'http://localhost:5000';
    rq(mainAddr + "/import_packages/" + importDirectory).then(function(htmlString) {
        if (htmlString != "false") {
            main.logPython(htmlString);
        }
    }).catch(function(err) {
        main.logPython('request not sent');
    })
}

python代码(数据库_处理程序.py)在

^{pr2}$

主要JavaScript代码(主.js)在

const electron = require("electron");
const {app, BrowserWindow} = electron;
app.on('window-all-closed', () => {
    app.quit();
})
app.on('ready', () => {
    var subpy = require('child_process').spawn('python', ['./database_handler.py']);
    //var subpy = require('child_process').spawn('./dist/hello.exe');
    var rq = require('request-promise');
    var mainAddr = 'http://localhost:5000';
    var openWindow = () => {
        let win = new BrowserWindow({
            width: 1920,
            height: 1080
        });
        win.maximize();
        win.setMenu(null);
        win.loadURL(`file://${__dirname}/login.html`);
        win.on('closed', () => {
            win = null;
            subpy.kill('SIGINT');
        })
    }
    var startUp = () => {
        rq(mainAddr).then(function(htmlString) {
            console.log('server started!');
            openWindow();
        }).catch(function(err) {
            console.log('waiting for the server start...');
            startUp();
        })
    }
    startUp();
})
exports.logPython = (returnData) => {
    console.log(returnData);
}

Tags: 代码路径appmainvarjsfunctionrequire
1条回答
网友
1楼 · 发布于 2024-09-28 21:42:09

看起来你在用管理员js作为UI中的代码,因此它在呈现器进程中。你的主.js看起来它正在项目的主进程中运行。我不确定它是否真的起作用主.js在管理员js对于这个案子。为什么不尝试使用ipc to send从UI到主进程的数据(主.js)? 在

另外,为了消除一个显而易见的答案。。。 控制台.log()主流程(主.js)会在你的终端上打印出来。控制台.log()在呈现器进程中(管理员js)在开发控制台中打印出来。在windows上,我想你可以通过点击你的用户界面,然后按ctrl+shift+I来打开它。所以如果你不知道这一点,它也许可以工作,但你看不到。在

相关问题 更多 >