在MATLAB中通过系统调用执行Python脚本的问题

0 投票
2 回答
2442 浏览
提问于 2025-04-16 11:52

我有一个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 个回答

0

你电脑上的命令行和你在Matlab里执行system命令时打开的命令行不一定是一样的。

很重要的一点是,它们可能有不同的环境变量。你可以试着执行system('echo $PATH')来检查一下你是否能访问到所有的库文件。

3

看起来你在使用OS X系统。建议你不要随便去更改全局的Python解释器设置。

你可以直接调用你想要的解释器。所以,不要用 system('python myscript.py') 这种方式,而是把你想用的解释器的完整路径放到一个变量里,然后调用:

system([use_this_python ' myscript.py'])

或者类似的方式。

至于你想用哪个Python解释器,这个决定可以由你和使用这个程序的人一起商量。也许可以默认调用“python”,但允许用户通过配置文件指定其他的解释器。

撰写回答