You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask获取用户输入并在外部程序中调用该变量的问题

Flask获取用户输入并在外部程序中调用该变量的问题

嗨,我来帮你理清这个问题的根源,然后给出可行的解决方案~

你遇到的核心问题是进程隔离:当你启动Flask服务器时,它会在一个独立的Python进程里运行;而你的外部程序import app的时候,其实是启动了另一个完全独立的Python进程——这两个进程的内存空间是完全分开的,Flask进程里的user_input变量和外部进程里的app.user_input根本不是同一个东西,自然拿不到用户提交的输入。

下面给你几个实用的解决办法:

方案1:让外部程序通过HTTP请求调用Flask接口获取数据

这是最贴合Flask设计理念的方式,毕竟Flask本身就是Web服务,外部程序可以像普通客户端一样发请求拿数据。

首先修改你的app.py,新增一个专门返回用户输入的接口:

from flask import Flask, request, render_template, jsonify

app = Flask(__name__)

user_input = None

@app.route("/", methods=["GET", "POST"])
def index():
    global user_input
    if request.method == "POST":
        user_input = request.form.get("user_input")
        return f"Stored input: {user_input}"
    return render_template("index.html")

# 新增接口:返回当前存储的用户输入
@app.route("/get-input", methods=["GET"])
def get_input():
    return jsonify({"user_input": user_input})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

然后修改你的外部程序,用requests库发送GET请求(先安装:pip install requests):

import requests

if __name__ == "__main__":
    try:
        # 向Flask服务器发送请求获取输入
        response = requests.get("http://localhost:5000/get-input")
        response.raise_for_status()  # 检查请求是否成功
        data = response.json()
        print("用户输入:", data["user_input"])
    except requests.exceptions.RequestException as e:
        print(f"获取数据失败: {e}")

方案2:用共享存储(文件/数据库)持久化数据

如果不想用HTTP接口,也可以把用户输入存在双方都能访问的地方,比如本地文件或者数据库,适合简单的本地场景。

比如用文件存储修改app.py:

from flask import Flask, request, render_template
import os

app = Flask(__name__)
# 定义存储文件的路径
STORAGE_FILE = "user_input.txt"

@app.route("/", methods=["GET", "POST"])
def index():
    if request.method == "POST":
        user_input = request.form.get("user_input")
        # 把输入写入文件
        with open(STORAGE_FILE, "w", encoding="utf-8") as f:
            f.write(user_input)
        return f"Stored input: {user_input}"
    return render_template("index.html")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

外部程序读取这个文件:

STORAGE_FILE = "user_input.txt"

if __name__ == "__main__":
    try:
        with open(STORAGE_FILE, "r", encoding="utf-8") as f:
            user_input = f.read().strip()
        print("用户输入:", user_input)
    except FileNotFoundError:
        print("还没有用户输入被存储哦")
    except Exception as e:
        print(f"读取失败: {e}")

方案3:进程间通信(IPC)(适合复杂场景)

如果你的两个程序需要高实时性的协作,可以用Python的multiprocessing模块做进程间通信,比如用Queue或者Pipe共享数据,但要注意Flask是多线程的,需要做好线程安全处理。不过这个方式相对复杂,一般推荐前两种方案就足够了。

总结一下:最推荐方案1,跨平台、跨进程都能稳定工作;方案2适合本地简单场景;方案3适合特殊的高实时性需求。

备注:内容来源于stack exchange,提问作者Srikar Anumolu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:02:58