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

如何在Python脚本持续运行时替换自身代码中的指定行?

问题

能否通过Python脚本自身代码,在脚本持续运行的同时替换其中某一行代码?(以下为简化示例,已知并非最优实现方式,仅用于特定场景测试)

现有单次运行可生效的代码:

import re

a = 0

f = open("main.py","r")
lines = f.read()
lines = re.sub(r"a = .+\n",r"a = " + str(a+1) + "\n",lines,count=1)
f.close()

f = open("main.py","w")
f.writelines(lines)
f.close()

每次运行该代码,变量a的值会加1。但添加循环后:

import re
import time

a = 0

while True:
    f = open("main.py","r")
    lines = f.read()
    lines = re.sub(r"a = .+\n",r"a = " + str(a+1) + "\n",lines,count=1)
    f.close()

    f = open("main.py","w")
    f.writelines(lines)
    f.close()
    time.sleep(2)

预期每2秒将a的值加1,但实际上只有在脚本结束(因循环为无限循环,需手动终止)时才会生效。请问如何实现脚本持续运行时持续修改代码?

解决方案

问题核心是内存中的变量a没有同步文件的修改:脚本启动时a = 0只执行一次,后续循环始终用内存里的初始值计算a+1,导致每次写入文件的都是a = 1,直到脚本终止前的最后一次覆盖才会显示变化。

要实现持续修改,每次循环必须先从文件中读取最新的a值,再计算更新:

修改后的代码:

import re
import time

while True:
    # 读取文件最新内容,提取当前a的值
    with open("main.py", "r") as f:
        lines = f.read()
    
    # 匹配并解析当前a的数值
    match = re.search(r"a = (\d+)", lines)
    if match:
        current_a = int(match.group(1))
        new_a = current_a + 1
        # 替换文件中的a值
        updated_lines = re.sub(r"a = .+\n", f"a = {new_a}\n", lines, count=1)
        
        # 写入更新后的内容
        with open("main.py", "w") as f:
            f.write(updated_lines)
    
    time.sleep(2)

另外,使用with语句操作文件更安全,它会自动处理文件关闭,避免手动关闭可能出现的遗漏。

注意:这种自我修改代码的方式仅适合测试场景,实际开发中容易引发文件读写冲突、代码逻辑混乱等问题,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:15:06