python - 通过 Matlab 的 system() 通过 shell 脚本调用 python 脚本会导致奇怪的错误

标签 python matlab shell

所以我让 Matlab“调出”外部 python 库。 Matlab 端使用 dlmwrite() 将 double 矩阵写出到文件中,通过连接建立一个命令字符串(它只是一行):

#/bin/tcsh
python myscript.py -option1 long_file_path1 long_file_path2 long_file_path3<br>

这个可怕的长命令被写到一个 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)

当我从一个单独的 shell 运行 caller.sh 时(例如,我设置了一个断点,并将 system() 中的命令复制粘贴到终端中),一切运行良好。当我将 caller.sh 的内部结构直接复制到终端时,它运行良好。

但出于某种原因,Matlab system(['sh caller.sh']) 导致它以最奇怪的方式爆炸,这表明我在自己的 python 脚本中调用的 python 库缺少一些线性代数库来自 Matlab 的运行时?!尽管它独立于 Matlab 运行,而且确实如此。我很困惑。

最佳答案

我想 Matlab 通过设置 LD_LIBRARY_PATH 的包装器运行,这样 Matlab 就可以从 /usr/lib/matlab/R2012a/sys/os/glnxa64/ 加载它的捆绑库>。当然,当应用程序从 matlab 运行时,它们可以而且将会破坏正确的应用程序,因为它们与那些库的不兼容版本相关联。我只能考虑取消设置脚本中的 LD_LIBRARY_PATH 但这不是最干净的解决方案。

关于python - 通过 Matlab 的 system() 通过 shell 脚本调用 python 脚本会导致奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15753556/

相关文章:

python - 从 URL 设置 QIcon() 像素图

matlab - 如何在 matlab 中执行棋盘插值?

linux - 向分离 screen 发送命令,这会更改事件窗口

linux - Shell:通过 root 用户 postgres 执行的并行命令

windows - Windows 的替代 bash/或在 cygwin 上帮助完成特定任务

python - 断言 JSON 响应

python - Python 的 list.remove(value) 如何确定要删除的值?

python - 在 python 中获取 .gz 文件的未压缩大小

matlab - 在 MATLAB 中,如何计算与条件关联的索引值的唯一数量?

matlab - 如何安装 MinGW-w64 C/C++ 编译器以在 MATLAB 2016b 中使用?