【IDL】IDL 8.5 中的 Python Bridge
IDL 8.5新增了IDL与Python互相调用的接口。在IDL代码中,可以访问任何Python模块,进行参数传递,或者调用built-in函数。同样的,在Python代码中,可以调用IDL功能,进行参数传递,或者操作IDL对象。
具备如下特性:
- 支持Python 2.7+和Python 3.4+版本
- 支持调用所有IDL程序和Python模块
- 无缝调用:在代码编写上保持原有风格
- 调用中所有输出参数被转换为标准输出格式
- 自动处理代码字母大小写和行列优先顺序
- 可以在任意语言中执行任意命令字符串
- 自动将IDL数组转换为numpy数组
- 调用程序或方法时,数据按地址进行传递
- 可以双向传递主变量
安装方法
1) 第一步就是要安装IDL 8.5(这不废话么…⊙﹏⊙‖∣);
2) 安装Python,版本要求Python 2.7.x 或 3.4.x,并包含numpy library。如果已经安装Python和numpy,请无视此步骤。如果没有安装,可以安装Anaconda(超级简单,鄙人就是安装的这个东东),包含了Python Bridge需要的所有功能模块;
注:Anaconda下载地址http://www.continuum.io/downloads
注:尽量别安装多个版本的Python,之前我安装了2.7.10和3.4.3两个版本,结果在IDL中使用时提示如下信息:
% PYTHON::LOAD: Unable to find a valid Python installation.
当我卸载3.4.3后,才可以正常使用。
3) 最后就是配置环境变量。
计算机——属性——高级系统设置,选择“高级”选项卡,点击下方的“环境变量”按钮,然后添加如下两个系统变量:
PATH = ...;c:\Program Files\Exelis\IDLXX\bin\bin.x86_64;... PYTHONPATH = c:\Program Files\Exelis\IDLXX\bin\bin.x86_64; C:\Program Files\Exelis\IDLXX\lib\bridges 注:其中XX表示IDL的版本,如85 |
图:添加的Path变量
4) 然后就可以Happy的使用了。
示例代码
1) 第一种:IDL调用Python
IDL> ran=python.import('numpy.random')
% Loaded DLM: PYTHON27.
IDL> arr=ran.rand(100)
IDL> plt=python.Import('matplotlib.pyplot')
IDL> p=plt.plot(arr)
IDL> void=plt.show(block=0)
图:IDL中调用Python
2) 第二种:IDL中使用Python命令行
在IDL控制台中输入 >>>,然后回车,即可进入Python命令行模式,如下所示:
IDL> >>>
>>> import matplotlib.pyplot as plt
>>> import numpy.random as ran
>>> arr = ran.rand(100)
>>> p = plt.plot(arr)
>>> plt.show()
>>>
运行效果与上图相同。
当不输入命令,直接回车时,退出Python命令行模式。
3) 第三种:Python调用IDL
启动Python,调用方法如下所示:
>>> from idlpy import IDL
>>> import numpy.random as ran
>>> arr = ran.rand(100)
>>> p = IDL.plot(arr, title='My Plot')
>>> p.color = 'red'
>>> p.save('myplot.pdf')
>>> p.close()
图:Python调用IDL绘图
图:Python调用IDL生成的PDF文档