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

如何通过点击其他文件中的链接运行Python脚本(Streamlit/Flask)

解决Streamlit页面点击链接无内容、端口变化问题

问题分析

  • 脚本文件名错误:你提供的脚本后缀是.py1(script1.py1、第二个script1.py1),但代码中调用的是.py后缀文件,导致Streamlit找不到目标脚本,自然无内容显示。
  • 冗余且错误的Flask使用:完全不需要用Flask实现需求——点击链接直接启动并跳转Streamlit脚本即可。原代码生成的链接指向Flask端口,但Flask仅提供触发脚本的路由,没有页面内容,访问后自然无显示。
  • 重复启动服务引发端口混乱:每次点击按钮都会启动新的Flask线程,且Streamlit默认会自动选择未被占用的端口(8501被占就用8502,以此类推),导致端口持续变化。
  • Streamlit按钮逻辑漏洞:Streamlit每次交互都会重新运行整个脚本,原代码重复启动线程会造成资源浪费和端口冲突。

修正后的实现方案

步骤1:修正脚本文件名

将script1.py1重命名为script1.py,第二个script1.py1重命名为script2.py,确保文件名与代码调用一致。

步骤2:简化main.py代码

去掉不必要的Flask依赖,直接通过指定端口启动Streamlit脚本,并用会话状态避免重复启动:

import streamlit as st
import subprocess
import os

# 定义脚本与对应端口的映射
scripts = {
    "Script 1": {"file": "script1.py", "port": 8502},
    "Script 2": {"file": "script2.py", "port": 8503},
}

# 初始化会话状态,记录脚本是否已启动
if "started_scripts" not in st.session_state:
    st.session_state.started_scripts = set()

# 生成每个脚本的启动按钮和跳转链接
for name, info in scripts.items():
    script_file = info["file"]
    port = info["port"]
    script_url = f"http://localhost:{port}"
    
    # 未启动时显示启动按钮
    if name not in st.session_state.started_scripts:
        if st.button(f"启动 {name}"):
            # 指定端口启动Streamlit,避免自动换端口
            subprocess.Popen(
                ["streamlit", "run", script_file, "--server.port", str(port)],
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                shell=True if os.name == "nt" else False
            )
            st.session_state.started_scripts.add(name)
            st.success(f"{name} 已启动,点击下方链接打开")
    
    # 已启动时显示跳转链接
    if name in st.session_state.started_scripts:
        st.markdown(f'<a href="{script_url}" target="_blank">打开 {name}</a>', unsafe_allow_html=True)

步骤3:脚本文件内容

script1.py:

import streamlit as st
st.write("Inside script1.py")

script2.py:

import streamlit as st
st.write("Inside script2.py")

修正后的优势

  • 手动指定Streamlit端口,避免端口自动变化,链接固定可靠。
  • 用会话状态记录已启动脚本,避免重复启动服务造成资源浪费。
  • 去掉冗余的Flask依赖,逻辑更简洁,完全匹配需求场景。

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:43:20