首页 > 编程语言 >利用CMD命令调用ENVITask实现混合编程

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

时间:2022-09-05 14:02:41浏览次数:54  
标签:文件 编程 args CMD ENVITask IDL 参数 sav

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来获取参数。

标签:文件,编程,args,CMD,ENVITask,IDL,参数,sav
From: https://www.cnblogs.com/enviidl/p/16657878.html

相关文章

  • 编程:从哪里开始?
    编程:从哪里开始?“我想学习编程,但我不知道从哪里开始?”如果这是您的想法,那么此博客适合您。如果你问某人这个问题,他们会告诉你“别担心,从python开始……”就是这样,我们......
  • windows系统命令行cmd查看显卡驱动版本号CUDA
    Win+R 输入cmd进入命令行输入nvidia-smi  ......
  • windows系统cmd切换盘符路径命令失效
    问题描述:比如当我在C盘想切换到D盘的某个文件夹路径下时   只是输出了那个路径但是并没有真的切换 这时候需要再多操作一步就会成功了  ......
  • Java并发编程之synchronized 与 volatile
    synchronized同步代码块一般使用Java的synchronized关键字来实现,有两种方式对方法进行加锁操作;第一处,在方法签名处加synchronized关键字;第二,使用synchronized(对象......
  • 43岁,开始编程
     先说一下我的背景吧。2006年硕士研究生毕业,所学的专业是热能与机械,研究生的课题是做CFD仿真。如果大家还记得16年以前的事情,那时正是中国的汽车行业开始崛起的时候,我当......
  • 《Unix/Linux系统编程》第一、二章学习笔记
    第一章引言让我最有收获的内容:1.8关于UnixUnix是一种通用操作系统。开发者:肯·汤普森(KenThompson)和丹尼斯·里奇(DennisRichie)诞生日期:20世纪70年代早期经典书目......
  • 《Unix/Linux系统编程》学习笔记1
    《Unix/Linux系统编程》学习笔记1第一章引言1、本书目标强化学生的编程背景知识:编程语言->编程开发动态数据结构应用:C结构、指针、链表、链树进程概念和进程管理并......
  • 如何学习一门新的编程
    工作之后要学习Verilog,从来没有接触过这门语言,于是发起了一个提问:如何学习一门新的编程语言?收到的答案有几种:跟着B站学习,看官方文档,直接用,做几个感兴趣的小项目,还有个姐妹......
  • Unix/Linux系统编程学习笔记-1
    笔记第一章引言一、概述:在第一章引言里,简单介绍了Unix的历史,包括贝尔实验室开发的Unix早期版本、AT&TSystemV以及Unix的其他版本,如BSD、HPUX、IBMAIX和Sun/Solari......
  • 《Unix/Linux系统编程》第一、二章读书笔记
    自学教材1、2章学习笔记一、任务要求学教材第1,2章,提交学习笔记(10分)知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)知识的结构......