2016-04-07 130 views
-2

该问题涉及运行'GAMMA SAR和干涉测量软件'(GAMMA)。为了在GAMMA中处理数据,用户需要在shell中输入复杂的命令。我试图用Python来将这些命令准备为字符串,并希望直接从Python运行/执行这些命令,而不是这种单调乏味的过程。dyld:Library未加载:libDIFF.dylib(在OSX El Capitan上)

下面是一个工作解决方案的简化示例:我在Python中准备一个字符串并将其打印到命令行。如果我手动将Python打印的字符串复制/粘贴到shell中,则Gamma可以平稳运行。

工作码

# Visualize interferogram 
p = 'dismph TMX.int 1189' 
print(p) #copy/pasting this output to a command line runs the external program 

这得到乏味作为每个命令需要被复制/从外壳到另一个壳粘贴。相反,我想运行Python并将命令打印到执行的shell中。以下代码能够将字符串打印到shell并执行它。

问题代码

import os 

# Visualize interferogram 
p = 'dismph TMX.int 1189' 
os.system(p) 

不幸的是,我得到了以下错误消息。

错误

dyld: Library not loaded: libDIFF.dylib 

Referenced from: /Users/[username]/[programname]/[functionname]/bin/dismph 
Reason: image not found 

该样品在OSX埃尔卡皮坦版本10.11.4,与Python 3.5.1运行|蟒蛇2.4.1(x86_64的)| (默认,2015年12月7日11:24:55)[达尔文GCC 4.2.1(Apple Inc. build 5577)]:

问这个问题的另一种方式:打字和跑步有什么区别shell中的命令与从Python打印并执行相同的字符串。从技术上讲,两者都应该看到相同的变量/路径/库,但在这种情况下似乎有区别。 GAMMA似乎无法找到必要的库。

+2

任何代码,只有理论? – haifzhan

+0

[看看这个相关的问题](http://stackoverflow.com/questions/17703510/dyld-library-not-loaded-reason-image-not-loaded)。似乎你错过了一个依赖关系,或者找不到所需的依赖关系。需要一些代码来进一步诊断。你在什么操作系统上?可能很可能是共享库的简单路径问题。 –

+0

这可能取决于平台。你在使用Apple iOS吗?哪个版本?这是一个32位或64位的Python? – tdelaney

回答

0

我要回答我自己的问题,希望其他人能看到这个解决方案,它会帮助他们解决类似的问题。

我看到的问题与El Capitan新的安全升级SIP(系统完整性保护)有关。它可以防止修改某些环境变量并修改受保护系统目录中的程序。 El Capitan不允许子进程重新分配某些环境变量,以防止恶意程序破坏系统安全。 https://support.apple.com/en-us/HT204899http://www.macworld.com/article/2948140/os-x/private-i-el-capitans-system-integrity-protection-will-shift-utilities-functions.html

简单的解决方案是将共享对象库复制到/ usr/local/lib(或相应的默认PATH变量),然后所有工作都像以前一样。

可以关闭El Capitan上的SIP,但必须通过引导到恢复分区并关闭SIP来完成安装。

相关问题