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

如何将用户输入的命令代码写入Python文件指定位置实现类终端程序自定义命令

解决方案

方案1:将代码插入文件指定位置(不推荐)

你当前代码不生效的核心原因是elif分支被追加到文件末尾,无法被主程序的命令判断逻辑命中。可以通过标记插入点位的方式实现指定位置写入:

  • 第一步:先在app.py的主命令判断块中添加插入标记,放在所有默认elif分支之后、兜底else分支之前
# 原有默认命令分支
elif t1 == 'default_cmd1':
    # 原有逻辑
elif t1 == 'default_cmd2':
    # 原有逻辑
# __CUSTOM_CMD_INSERT_POINT__  # 插入标记,不要修改此行
else:
    print("unknown command")
  • 第二步:修改你的写入逻辑,先读取全文定位标记位置,插入新命令后再回写文件(同时修复原代码中=赋值判断的语法错误):
if triggered == True:
    cmd_name = input("name of command: ")
    cmd_formatting = f"elif t1 == '{cmd_name}':\n    "
    injected_code = input("paste command code: ").replace('\n', '\n    ') + '\n'
    
    # 读取原文件内容
    with open("app.py", "r", encoding="utf-8") as f:
        content = f.read()
    
    # 定位插入点
    insert_tag = "# __CUSTOM_CMD_INSERT_POINT__"
    if insert_tag not in content:
        print("错误:未找到插入标记")
    else:
        # 替换插入标记,新命令插在标记前面,保留标记供后续插入
        new_content = content.replace(insert_tag, f"{cmd_formatting}{injected_code}\n{insert_tag}")
        with open("app.py", "w", encoding="utf-8") as f:
            f.write(new_content)
        print(f"command created succesfully [{cmd_name}]")

注意:该方案风险极高,用户输入的异常代码会直接破坏主程序文件,导致程序完全无法启动。

方案2:使用命令注册表(推荐)

完全不需要动态修改主程序代码,用字典做命令注册的逻辑更稳定安全:

  • 第一步:在app.py中初始化命令注册表,替代硬编码的if elif分支
# 初始化命令注册表
cmd_registry = {}

# 注册默认命令示例
def default_cmd1_handler(args):
    print("执行默认命令1")
cmd_registry["default_cmd1"] = default_cmd1_handler

def default_cmd2_handler(args):
    print("执行默认命令2")
cmd_registry["default_cmd2"] = default_cmd2_handler
  • 第二步:命令执行逻辑改为从注册表匹配
# 原有获取t1的逻辑不变
if t1 in cmd_registry:
    # 执行对应命令处理函数
    cmd_registry[t1](args)
else:
    print("unknown command")
  • 第三步:自定义命令直接注册到注册表,持久化可以存在独立文件中
    你可以把用户输入的自定义命令代码存在单独的custom_cmds.py文件中,程序启动时自动导入并注册到cmd_registry即可,完全不需要修改主程序代码,也不会因为错误输入搞崩主程序。

提示:允许用户输入任意代码执行存在代码注入风险,生产环境使用需要做好权限控制和代码校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:45:04