[英]Flask only working as expected in debug mode
我正在使用電子和燒瓶創建桌面應用程序。 當我嘗試發送選定的路徑時(由用戶通過文件夾選擇對話框選擇。使用電子,我能夠獲得完整路徑,而不是C:/ fake_path之類的東西。這是因為電子通過.files [ 0] .path)到使用flask的python,我從沒收到響應或捕獲到錯誤(rq之后的任一分支都從未調用過main.logPython函數)。
但是,如果我在python文件中包含app.debug = True
來打開Flask調試器,它將按預期運行並打印出路徑。 本質上,除非我將其置於調試模式,否則甚至無法到達python代碼。
編輯:我知道這是真的,因為我試圖運行python代碼,而不僅僅是返回(例如創建新文件),並且永遠不會運行。
編輯#2:似乎此問題與admin.js文件有關。 如果我嘗試在main.js文件中建立類似的連接,則會得到預期的結果,但是,如果我在admin.js文件中使用相同的代碼,則不會得到如上所述的響應。
希望我提供了足夠的信息。 如果您還有其他需要,請告訴我。
抱歉,JavaScript代碼存在任何格式問題,因為它是我的新手,所以我將其放入臟標記中以對其進行一些清理。
調用JavaScript代碼(admin.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代碼(database_handler.py)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, request
import sqlite3
app = Flask(__name__)
# app.debug = True
@app.route("/")
def hello():
return "true"
@app.route("/login/<username>/<password>")
def login(username, password):
conn = sqlite3.connect("hict.sqlite")
cursor = conn.cursor()
cursor.execute("SELECT firstname, lastname, userclass FROM credentials "
"WHERE username=? AND password=? LIMIT 1;",
(username, password))
data = cursor.fetchall()
if len(data) == 0:
return "false"
else:
return "|".join(map(str, data[0]))
@app.route("/import_packages/<path:import_directory>")
def import_packages(import_directory):
return import_directory
if __name__ == "__main__":
app.run(host='127.0.0.1', port=5000)
主要JavaScript程式碼(main.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);
}
您似乎在用戶界面中使用admin.js作為代碼,因此它處於渲染器過程中。 您的main.js看起來好像正在項目的主流程中運行。 我不確定在這種情況下是否真的需要在admin.js中使用main.js。 為什么不嘗試使用ipc將數據從UI發送到主進程(main.js)?
另外,為了消除明顯的答案,主進程中的console.log()(main.js)將按您的期望在終端中打印出來。 渲染器進程(admin.js)中的console.log()在開發者控制台中打印出來。 在Windows上,我認為您可以通過以下方法打開它:單擊您的UI,然后按Ctrl + Shift + i。 因此,如果您不知道該信息,它可能會起作用,但您看不到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.