Colab中运行Python脚本后无法调用输出变量的问题求助
问题解决:Colab中运行外部脚本后无法访问变量的问题
问题原因
你用!python命令运行外部脚本时,相当于启动了一个独立的Python进程,这个进程和Colab当前的Jupyter内核进程完全隔离——两个进程的内存空间不共享,所以脚本里定义的变量G只会存在于那个临时进程中,进程结束后就消失了,自然在其他单元格里调用会提示未定义。
至于保存CSV失败,大概率是因为你没指定明确的存储路径,脚本默认会把文件存在临时进程的工作目录里,这个目录和Colab当前会话的目录不互通,而且Colab重启后临时目录会被清空,所以你找不到保存的文件。
解决方案
提供两种实用的解决方式,按需选择:
方式1:直接在Colab会话中导入脚本函数并执行
这种方式能让变量直接留在当前会话里,方便后续调用:
- 先修改你的
main.py,把生成G的逻辑封装成函数:
import pandas as pd def f(i): g = i return g def get_G(): G = [] for i in range(0,10): g = f(i) G.append(g) return pd.DataFrame(G) # 脚本单独运行时也能正常保存 if __name__ == "__main__": G = get_G() G.to_csv('/content/gdrive/MyDrive/folder/G.csv', index=False)
- 在Colab的新单元格里,导入并调用这个函数:
# 添加脚本所在目录到Python路径 import sys sys.path.append('/content/gdrive/MyDrive/folder') from main import get_G # 生成变量G,直接在当前会话可用 G = get_G() print(G) # 也可以直接在当前会话保存 G.to_csv('/content/gdrive/MyDrive/folder/G.csv', index=False)
方式2:让脚本把结果保存到Drive,再在Colab中读取
如果不想修改脚本结构,就让脚本把结果存到你挂载的Drive路径里,之后在Colab中读取文件:
- 修改
main.py的if __name__块,指定Drive的绝对保存路径:
import pandas as pd def f(i): g = i return g if __name__ == "__main__": G = [] for i in range(0,10): g = f(i) G.append(g) G = pd.DataFrame(G) # 保存到你挂载的Drive目录下 G.to_csv('/content/gdrive/MyDrive/folder/G.csv', index=False)
- 运行脚本后,在Colab新单元格里读取这个文件:
import pandas as pd # 读取Drive中的CSV文件,得到变量G G = pd.read_csv('/content/gdrive/MyDrive/folder/G.csv') print(G)
内容的提问来源于stack exchange,提问作者Talent Lessbum
相关产品推荐
相关产品推荐

