通过Matlab通过shell脚本调用python脚本';s system()会导致奇怪的错误
因此,我将Matlab“调用”到外部python库。Matlab端使用dlmwrite()将一个双精度矩阵写入一个文件,通过连接到以下音调建立一个命令字符串(仅一行):通过Matlab通过shell脚本调用python脚本';s system()会导致奇怪的错误,python,matlab,shell,Python,Matlab,Shell,因此,我将Matlab“调用”到外部python库。Matlab端使用dlmwrite()将一个双精度矩阵写入一个文件,通过连接到以下音调建立一个命令字符串(仅一行): #/bin/tcsh python myscript.py -option1 long_file_path1 long_file_path2 long_file_path3<br> #/bin/tcsh python myscript.py-option1 long_file_path1 long_file_pat
#/bin/tcsh
python myscript.py -option1 long_file_path1 long_file_path2 long_file_path3<br>
#/bin/tcsh
python myscript.py-option1 long_file_path1 long_file_path2 long_file_path3
这个长而可怕的命令被编写成一个shell脚本,让它命名为caller.sh,然后Matlab使用system()命令成功地调用caller.sh上的chmod 755
但是,当我尝试在shell脚本(即system(['sh caller.sh'])上实际运行system()命令时,它突然崩溃:
Traceback (most recent call last):
File "/homes/sb1006/PhD_Year_1/code//my_libs/LSTM/python/monohiddenlayer_regression_LSTM.py", line 1, in <module>
import pybrain
File "/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/__init__.py", line 1, in <module>
from structure.__init__ import *
File "/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/structure/__init__.py", line 1, in <module>
from connections.__init__ import *
File "/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/structure/connections/__init__.py", line 1, in <module>
from full import FullConnection
File "/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/structure/connections/full.py", line 3, in <module>
from scipy import reshape, dot, outer
File "/usr/lib/python2.7/dist-packages/scipy/__init__.py", line 78, in <module>
from numpy import show_config as show_numpy_config
File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 137, in <module>
import add_newdocs
File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 9, in <module>
from numpy.lib import add_newdoc
File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 13, in <module>
from polynomial import *
File "/usr/lib/python2.7/dist-packages/numpy/lib/polynomial.py", line 17, in <module>
from numpy.linalg import eigvals, lstsq
File "/usr/lib/python2.7/dist-packages/numpy/linalg/__init__.py", line 48, in <module>
from linalg import *
File "/usr/lib/python2.7/dist-packages/numpy/linalg/linalg.py", line 23, in <module>
from numpy.linalg import lapack_lite
ImportError: /usr/lib/matlab/R2012a/sys/os/glnxa64/libgfortran.so.3: version 'GFORTRAN_1.4' not found (required by /usr/lib/liblapack.so.3gf)
回溯(最近一次呼叫最后一次):
文件“/homes/sb1006/PhD_Year_1/code//my_libs/LSTM/python/monohidenlayer_regression_LSTM.py”,第1行,在
进口猪脑
文件“/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/___init__.py”,第1行,在
从结构。初始化导入*
文件“/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/structure/_init_uuuuuu.py”,第1行,在
来自连接。初始化导入*
文件“/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/structure/connections/_init__.py”,第1行,在
从完全导入到完全连接
文件“/homes/sb1006/PhD_Year_1/code/my_libs/LSTM/python/pybrain/structure/connections/full.py”,第3行,在
从scipy导入重塑、圆点、外部
文件“/usr/lib/python2.7/dist-packages/scipy/_-init__.py”,第78行,在
从numpy导入show\u config作为show\u numpy\u config
文件“/usr/lib/python2.7/dist-packages/numpy/_-init__.py”,第137行,在
导入添加新文档
文件“/usr/lib/python2.7/dist packages/numpy/add_newdocs.py”,第9行,在
从numpy.lib导入添加新文档
文件“/usr/lib/python2.7/dist packages/numpy/lib/_init__.py”,第13行,在
从多项式导入*
文件“/usr/lib/python2.7/dist packages/numpy/lib/polynomy.py”,第17行,在
从numpy.linalg进口eigvals,lstsq
文件“/usr/lib/python2.7/dist-packages/numpy/linalg/_-init__.py”,第48行,在
从linalg进口*
文件“/usr/lib/python2.7/dist packages/numpy/linalg/linalg.py”,第23行,在
从numpy.linalg导入lapack_lite
导入错误:/usr/lib/matlab/R2012a/sys/os/glnxa64/libgfortran.so.3:找不到版本“GFORTRAN_1.4”(由/usr/lib/liblapack.so.3gf所需)
当我从一个单独的shell运行caller.sh时(如中所示,我设置了一个断点,并将system()中的命令复制到终端中),一切运行正常。当我将caller.sh的内部直接复制到终端中时,它运行正常
但是由于某种原因,Matlab系统(['sh caller.sh'])是导致它以最奇怪的方式爆炸,这表明我在自己的python脚本中调用的python库缺少Matlab运行时的一些线性代数库?!尽管事实证明它独立于Matlab运行,这是显而易见的。我很困惑。我想Matlab是通过设置
LD\u library\u路径的包装器运行的这样Matlab就可以从/usr/lib/Matlab/R2012a/sys/os/glnxa64/
加载它的捆绑库了。当然,当它们从Matlab运行时,这会破坏正确的应用程序,因为它们与那些库的不兼容版本相链接。我只能想在脚本中取消LD_LIBRARY_PATH
e最干净的解决方案。请将错误粘贴到此处,然后使用编辑器工具栏中的{}
按钮缩进文本4个空格。呃,正如您所述,我将整个错误复制到{}块中,但它没有保留选项卡…下次,选择整个回溯,并使用{}
将其缩进4个空格。我为您修复了它。会议提交截止日期为6天,它就可以了:)我没有想到Matlab会在自己和外壳之间设置自己的环境。我绝对不认为Matlab和Python会在一些常见的环境变量名上发生冲突。谢谢大家!@user1843053事实上,它与Python无关,任何其他与libgfortran.so.3或任何其他绑定库链接的程序都可能在该环境中中断。因此,我明白了-如果链接器能够匹配环境变量(这些变量具有一些连接到“LD_LIBRARY_PATH”的标识前缀),那就太好了,而不是依赖于在所有可执行文件之间共享的单一变量。不