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

在Bash运行Python脚本时,如何动态调用函数并赋值返回值?

解决方案:交互式选择函数生成并拼接HTML内容

听起来你需要的是一个能交互式选择生成HTML片段、还支持循环拼接结果的脚本对吧?我帮你梳理下问题核心和具体实现方案:

问题核心拆解

你之前把makeHTMLCBs()这类带括号的函数放进列表时,Python会立即执行它们——这是因为括号就是函数调用的语法。我们需要的是存储函数对象本身(不带括号),等到用户选择后再去调用执行。

完整实现代码

下面是适配你需求的脚本,能在Bash中正常运行,支持选择编号调用函数、循环拼接HTML内容:

import sys

# 1. 先配置模块路径(替换成你实际的模块路径)
pyPaths = ["/path/to/your/python/modules"]
for path in pyPaths:
    sys.path.append(path)

# 2. 导入需要的函数(注意:这里只导入函数对象,不要加括号!)
from your_module_name import (
    makeHTMLrbsNums,
    makeHTMLCBs,
    makeDropdownboxes,
    readLinesTextboxesInlineV3
)

# 3. 定义函数选项:(编号, 函数对象, 功能描述)
function_menu = [
    (1, makeHTMLrbsNums, "生成数字单选框HTML"),
    (2, makeHTMLCBs, "生成复选框HTML"),
    (3, makeDropdownboxes, "生成下拉框HTML"),
    (4, readLinesTextboxesInlineV3, "生成行内文本框HTML"),
    (0, None, "退出并导出最终网页")
]

def main():
    final_html = ""
    print("=== 每周作业网页生成工具 ===")
    
    while True:
        # 打印可选菜单
        print("\n请选择要执行的功能:")
        for num, func, desc in function_menu:
            print(f"{num}. {desc}")
        
        # 处理用户输入
        try:
            choice = int(input("请输入编号:"))
            # 匹配用户选择的选项
            selected = next((opt for opt in function_menu if opt[0] == choice), None)
            
            if not selected:
                print("⚠️ 无效编号,请重新输入!")
                continue
            
            num, target_func, desc = selected
            if num == 0:
                print("\n✅ 开始生成最终网页...")
                break
            
            # 调用选中的函数,拼接结果
            print(f"🔧 正在执行「{desc}」...")
            html_segment = target_func()
            final_html += html_segment
            print("✅ 该部分HTML已成功添加!")
        
        except ValueError:
            print("⚠️ 请输入有效的数字编号!")
    
    # 将最终结果写入HTML文件
    with open("weekly_assignment.html", "w", encoding="utf-8") as f:
        # 可以根据需求添加基础HTML结构
        f.write(f"""
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>每周作业网页</title>
</head>
<body>
    {final_html}
</body>
</html>
        """)
    print("🎉 网页已生成:weekly_assignment.html")

if __name__ == "__main__":
    main()

关键细节说明

  1. 存储函数对象而非调用结果:function_menu里的函数名不带括号,只有当用户选择后,才通过target_func()去执行,完美解决了“函数立即执行”的问题。
  2. 交互式循环逻辑:通过while True实现循环选择,直到用户输入0退出,满足你“每周按需拼接不同模块”的需求。
  3. 异常处理:对非数字输入做了捕获,避免脚本直接崩溃。
  4. 输出完整HTML文件:最后自动把拼接好的内容套入基础HTML结构,直接生成可打开的网页文件。

使用注意事项

  • 把/path/to/your/python/modules替换成你实际存放自定义函数的目录路径
  • 如果你的函数需要参数,可以在调用target_func()前添加参数输入逻辑
  • 可以根据需求修改function_menu里的选项,添加/删除函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:07:14