问题与运行'GAMMA SAR和干涉测量软件'(GAMMA)有关。要在GAMMA中处理数据,用户需要在shell中键入复杂命令。我尝试使用Python将这些命令准备为字符串,并希望直接从Python运行/执行这些命令,而不是这个繁琐的过程。
下面是一个工作解决方案的简化示例:我在Python中准备一个字符串并将其打印到命令行。如果我然后手动将Python打印到的shell中的字符串复制/粘贴到同一个shell,Gamma运行顺畅。
工作代码:
# Visualize interferogram
p = 'dismph TMX.int 1189'
print(p) #copy/pasting this output to a command line runs the external program
由于每个命令都需要从shell复制/粘贴到另一个shell,因此这很麻烦。相反,我想只运行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 El Capitan,版本10.11.4上运行,使用Python 3.5.1 | Anaconda 2.4.1(x86_64)| (默认,2015年12月7日,11:24:55)[GCC 4.2.1(Apple Inc. build 5577)]在达尔文:
提出这个问题的另一种方式:在shell中输入和运行命令与打印和从Python执行相同的字符串之间有什么区别。从技术上讲,两者都应该看到相同的变量/路径/库,但在这种情况下似乎存在差异。 GAMMA似乎无法找到必要的库。
答案 0 :(得分:0)
我将回答我自己的问题,希望其他人能看到这个解决方案,这将有助于他们排除类似问题。
我看到的问题与El Capitan的新安全升级有关,称为SIP(系统完整性保护)。它可以防止修改某些环境变量并修改受保护系统目录中的程序。 El Capitan不允许子进程重新分配某些环境变量,以防止恶意程序破坏系统安全性。 https://support.apple.com/en-us/HT204899和http://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来完成。