Python命令行运行代码关闭绘图后,如何不重新执行代码再次绘制信号
Python实现类似MATLAB工作区保留变量的方案
报错原因说明
'plt.plot' 不是内部或外部命令的报错是因为plt.plot(signal)属于Python代码,只能在Python/IPython的交互解释器环境中执行,不能直接输入到系统的命令行终端运行。
可用解决方案
方案1:交互模式运行脚本(最接近MATLAB使用体验)
普通的python signal.py运行结束后Python解释器会直接退出,所有内存中的变量都会被销毁,自然无法后续调用。加上-i参数启动交互模式即可让解释器在脚本运行结束后保留运行环境:
- 执行命令:
python -i signal.py - 脚本跑完后会停留在Python交互终端,你代码中生成的
samples、signal、fs等所有变量都可以直接调用,输入以下代码即可重新绘图:plt.plot(signal) plt.show()
如果安装了IPython,使用ipython -i signal.py运行体验更好,支持代码补全、历史命令回溯等功能,和MATLAB工作区的使用逻辑几乎一致。
方案2:持久化存储变量到本地,后续随时加载
如果你需要关闭终端后下次还能调用之前生成的变量,可以用Python内置的pickle模块将变量序列化存储到本地文件,使用时直接加载即可,无需重新运行信号生成逻辑。
- 修改你的
signal.py代码,新增变量存储逻辑:import pickle import numpy as np from scipy.io import wavfile from matplotlib import pyplot as plt # 请补全你自己的t、f、fs参数定义 t = 1 f = 440 fs = 44100 samples=np.arange(t*fs)/fs signal=np.sin(2*np.pi*f*samples) signal*=32767 signal=np.int16(signal) wavfile.write(input("Name your file: "),fs,signal) plt.plot(signal) plt.show() # 存储所有需要保留的变量到pkl文件 workspace_data = { "samples": samples, "signal": signal, "fs": fs, "f": f, "t": t } with open("signal_workspace.pkl", "wb") as f: pickle.dump(workspace_data, f) - 后续需要调用变量时,在任意Python环境中执行以下代码即可加载:
import pickle from matplotlib import pyplot as plt with open("signal_workspace.pkl", "rb") as f: workspace = pickle.load(f) # 直接使用加载的变量 signal = workspace["signal"] plt.plot(signal) plt.show()
内容的提问来源于stack exchange,提问作者whoknowsmerida
相关产品推荐
相关产品推荐

