如何将用户输入的命令代码写入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
相关产品推荐
相关产品推荐

