加载中…
正文 字体大小:

利用CMD命令调用ENVITask实现混合编程

(2017-02-22 10:41:29)
标签:

envitask

混合编程

cmd调用idl

cmd调用envi

分类: ENVI二次开发

IDL可以将pro源码编译为sav文件,然后利用cmd命令执行此sav文件,即可实现混合编程。

下面的测试版本为 ENVI 5.3.1/IDL 8.5.1。

 

此方法同样适用于纯 IDL 开发方式。

 

1. 编写IDL代码

 

IDL测试代码如下:

PRO test_ENVITask_Args

;此行代码很重要,一定要加上

COMPILE_OPT idl2

 

;Command_Line_Args可以获取-args后边跟的参数,count返回参数个数

args = Command_Line_Args(Count=c)

 

;如果功能需要2个参数,可以做一个判断

IF c NE 2 THEN BEGIN

tmp = DIALOG_MESSAGE('请输入2个参数,分别为输入文件和输出路径')

return

ENDIF

 

;获取2个参数,一个输入文件,一个输出路径

;需要注意的是,即便100这样的参数,获取进来也是string类型,根据需要进行转换

infile = args[0]

outfile = args[1]

 

;启动ENVI,加headless关键字

e=envi(/headless)

task = ENVITask('QUAC')

raster = e.OpenRaster(infile)

task.input_raster = raster

task.output_raster_uri = outfile

task.execute

 

tmp = DIALOG_MESSAGE('执行成功')

END

 

2. 构建sav文件

 

编译sav文件的操作顺序和命令很重要,一定逐步完成。

 

第一步:重置IDL进程

可单击IDL工具栏中的"重置"按钮,也可在IDL控制台中输入 .f 然后回车。

 

第二步:编译pro文件

如果pro文件个数较少时,逐个手动编译即可。

如果文件个数较多,建议以工程方式构建项目,一步即可构建sav文件。

 

第三步:加载pro调用的函数

在IDL控制台执行如下命令即可:

resolve_all, skip_routines='envi', /continue_on_error

 

第四步:构建sav文件

在IDL控制台执行如下命令:

save,filename='D:\temp\test_ENVITask_Args.sav',/routines

注:filename指定为sav文件输出路径,sav文件名必须与pro主过程同名。

 

3. 执行cmd命令

 

在cmd中执行如下命令即可实现可传参调用ENVITask。(整个命令为1行,无回车

"C:\Program Files\Exelis\IDL85\bin\bin.x86_64\idlrt.exe" "D:\temp\test_ENVITask_Args.sav" -args "C:\Program Files\Exelis\ENVI53\classic\data\can_tmr.hdr" "D:\temp\quac_result_args.dat"

 

  • "C:\Program Files\Exelis\IDL85\bin\bin.x86_64\idlrt.exe":ENVI本地安装路径
  • "D:\temp\test_ENVITask_Args.sav":sav文件所在完整路径
  • -args:后边跟的是传入参数

 

注:参数个数和cmd命令长度可能有限制,如果参数过多,可将参数保存在txt或xml文件中,然后在sav文件中解析txt或xml来获取参数。

0

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
  • 评论加载中,请稍候...
发评论

       

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有