Python Tkinter 与 Flask API 和子进程
Python Tkinter with Flask API and Subprocess
我可以 运行 来自 subprocess
中另一个 python 文件的函数吗?
我使用 pyinstaller
将 tkinter
转换为 executable
文件。我想尽可能地 deploy/run .exe
文件到另一台计算机而不安装 python
.
#gui.py
from tkinter import *
import os
import subprocess
root = Tk()
root.geometry("300x150")
def backendStart():
subprocess.Popen(["test.py"], shell=True)
label = Label(root, text="Connection String", fg="grey", font=("Helvetica", 15, "bold"))
label.pack(pady=(0,3))
root.after_idle(backendStart)
root.mainloop()
这是我的样本app.py
from flask import Flask, jsonify
from flask_restful import Api, Resource
from flask_socketio import SocketIO, emit
from flask_cors import CORS
import random
from connection import cursor
app = Flask(__name__)
app.config["DEBUG"] = True
api = Api(app)
CORS(app)
socketio = SocketIO(app, cors_allowed_origins="*")
@socketio.on("connect")
def ClientConnection():
print("Client is Connected")
@socketio.on("realtime", namespace="/sample-socket")
def RealTimeData():
while True:
num = random.randint(1, 100)
emit("data", {"random": num})
socketio.sleep(1)
@socketio.on("disconnect")
def ClientDisconnected():
print("client has disconnected")
class HomePage(Resource):
def get(self):
return jsonify(msg="hello world")
api.add_resource(HomePage, "/")
if __name__ == '__main__':
socketio.run(app, host="192.168.0.109", port=5000)
目前,我制作了一个 .spec
文件,用于配置名称、徽标和包含的 files/libs。只要我将 app.py
与数据库的 connection.py
一起粘贴到构建文件夹中,.exe
文件就可以工作。
但是有了这个设置,我确实需要安装 python
以及我用于 app.py
和 connection.py
的库
Could I run a function from another
python file inside subprocess?
你可以使用 multiprocessing.Process()
编辑:
专家解答见here
替代解决方案:
假设你想要 运行 app.exe(即 app.py),你可以将它们全部打包到一个文件夹中(--onedir)并将这些 exe 和 pyd 的子文件夹....在一起,就像
gui
----flask (and other folders)
----*.pyd
----app.exe
----gui.exe
----python39.dll
您将需要一个自定义规范文件来执行此操作。
见 https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles
我可以 运行 来自 subprocess
中另一个 python 文件的函数吗?
我使用 pyinstaller
将 tkinter
转换为 executable
文件。我想尽可能地 deploy/run .exe
文件到另一台计算机而不安装 python
.
#gui.py
from tkinter import *
import os
import subprocess
root = Tk()
root.geometry("300x150")
def backendStart():
subprocess.Popen(["test.py"], shell=True)
label = Label(root, text="Connection String", fg="grey", font=("Helvetica", 15, "bold"))
label.pack(pady=(0,3))
root.after_idle(backendStart)
root.mainloop()
这是我的样本app.py
from flask import Flask, jsonify
from flask_restful import Api, Resource
from flask_socketio import SocketIO, emit
from flask_cors import CORS
import random
from connection import cursor
app = Flask(__name__)
app.config["DEBUG"] = True
api = Api(app)
CORS(app)
socketio = SocketIO(app, cors_allowed_origins="*")
@socketio.on("connect")
def ClientConnection():
print("Client is Connected")
@socketio.on("realtime", namespace="/sample-socket")
def RealTimeData():
while True:
num = random.randint(1, 100)
emit("data", {"random": num})
socketio.sleep(1)
@socketio.on("disconnect")
def ClientDisconnected():
print("client has disconnected")
class HomePage(Resource):
def get(self):
return jsonify(msg="hello world")
api.add_resource(HomePage, "/")
if __name__ == '__main__':
socketio.run(app, host="192.168.0.109", port=5000)
目前,我制作了一个 .spec
文件,用于配置名称、徽标和包含的 files/libs。只要我将 app.py
与数据库的 connection.py
一起粘贴到构建文件夹中,.exe
文件就可以工作。
但是有了这个设置,我确实需要安装 python
以及我用于 app.py
和 connection.py
Could I run a function from another
python file inside subprocess?
你可以使用 multiprocessing.Process()
编辑:
专家解答见here
替代解决方案:
假设你想要 运行 app.exe(即 app.py),你可以将它们全部打包到一个文件夹中(--onedir)并将这些 exe 和 pyd 的子文件夹....在一起,就像
gui
----flask (and other folders)
----*.pyd
----app.exe
----gui.exe
----python39.dll
您将需要一个自定义规范文件来执行此操作。
见 https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles