在MATLAB中通过系统调用执行Python脚本的问题
我有一个MATLAB的函数,需要和Python代码进行交流(不需要很快,也不常交流)。我让MATLAB把一些数字写入一个文件,然后Python读取这个文件,做一些计算,再把结果写入另一个文件。最后,MATLAB再读取这个结果文件,继续它的工作。
我遇到的问题是,当我想从MATLAB执行Python脚本时,发现之前在MATLAB里用系统调用执行Python脚本就可以了:
system('python myscript.py')
但是,当Python脚本运行到使用numpy的'loadtxt'函数时,就出问题了:
NameError: name 'loadtxt' is not defined
我已经在脚本里定义了这个函数(用的是from numpy import *)。如果我直接在终端执行这个脚本,使用loadtxt读取文件是没问题的。只有在用系统调用执行脚本时,才会出现这个错误。这个Python .py文件和执行系统调用的MATLAB .m文件在同一个目录下。我用同样的方法执行其他没有用到loadtxt的脚本时,都是正常的。
有没有什么建议?
2 个回答
你电脑上的命令行和你在Matlab里执行system
命令时打开的命令行不一定是一样的。
很重要的一点是,它们可能有不同的环境变量。你可以试着执行system('echo $PATH')
来检查一下你是否能访问到所有的库文件。
看起来你在使用OS X系统。建议你不要随便去更改全局的Python解释器设置。
你可以直接调用你想要的解释器。所以,不要用 system('python myscript.py')
这种方式,而是把你想用的解释器的完整路径放到一个变量里,然后调用:
system([use_this_python ' myscript.py'])
或者类似的方式。
至于你想用哪个Python解释器,这个决定可以由你和使用这个程序的人一起商量。也许可以默认调用“python”,但允许用户通过配置文件指定其他的解释器。