IDL/Programming

터미널 프롬프트상에서 IDL 프로그램의 실행에 관하여

이상우_idl 2016. 3. 28. 09:00
반응형

오늘 소개할 내용은 제목만으로는 바로 그 의미가 명확하지 않을 수도 있는데, OS의 터미널 모드의 프롬프트상에서 IDL 소스코드 파일인 .pro 파일을 실행하는 방법들에 관한 내용입니다. 터미널 모드라고 하면 Linux나 Mac OS 등에서는 X-terminal이 될 것이고, 윈도우즈의 경우에는 cmd 명령으로 띄우는 명령 프롬프트를 뜻합니다. 프롬프트상에서 각종 명령어들을 타이핑하여 실행하는 방식으로, 마우스 클릭에 의한 방식과는 또 다릅니다. IDL의 경우도 최근에는 IDLDE(IDL Development Environment)라고 하는 하나의 유저 인터페이스상에서 프로그램의 작성, 컴파일, 실행 등을 한꺼번에 하는 경우가 많지만, 예전에는 터미널 프롬프트상에서 컴파일 및 실행을 하고 프로그램 작성은 별도의 에디터(vi editor와 같은)에서 작성하는 방식으로 작업하는 경우가 많았습니다. 물론 요즘 버전의 IDL이라 하더라도 후자와 같은 방식의 작업은 유저가 원한다면 얼마든지 가능합니다.


예를 들어 IDL이 이미 설치된 Mac OS 기반의 PC의 경우에는 다음과 같이 터미널 프롬프트상에서 IDL을 실행할 수 있습니다. 이 그림에서 보이는 화면에서는 현재 디렉토리안에 저장해놓은 test1.pro라는 프로그램이 있고 이를 IDL상에서 실행하는 모습을 보여주고 있습니다.



에디터로 열어본 이 test1.pro의 내용은 다음과 같은데, 몇가지 매우 단순한 계산들을 수행하고 그 결과값들을 출력합니다.



어쨌든 전체적인 작업의 전반적인 흐름은 대략 다음과 같습니다.


1) 프로그램 소스코드인 .pro 파일을 만든다 (별도의 에디터 프로그램 사용)

2) IDL 세션을 띄운다 (터미널 프롬프트상에서 idl 입력 및 엔터키)

3) IDL 세션상에서 프로그램을 실행 (IDL 프롬프트상에서 프로그램 이름 입력 및 엔터키)


그런데, 위의 과정에서 2)의 과정을 생략하는 것도 가능합니다. 즉, IDL 세션을 직접 띄우지 않고, 터미널 프롬프트상에서 바로 IDL 소스코드인 .pro 파일을 실행하는 것이 가능하다는 의미입니다. 그 모습은 다음 그림과 같습니다.



이 그림의 맨 위에서 사용된 명령을 잘 보면 다음과 같습니다.


idl -e test1


즉, 터미널 프롬프트상에서 idl 명령을 사용할 때 -e 옵션을 주고 그 뒤에 실행하고자 하는 프로그램의 이름(.pro 제외하고 이름만)을 적어주고 엔터키를 누르면 됩니다. 그러면 프로그램의 내용에 명시된 작업을 수행하고 다시 터미널 프롬프트로 돌아오게 됩니다. 물론 이 과정을 자세히 보면 IDL 세션이 뜨긴 합니다만, 이 행위는 명령을 수행하는 과정에서 알아서 진행된 것일 뿐 유저가 명시적으로세션을 활성화시킨 것과는 다른 상황입니다. 이와 같은 방식으로 소스코드를 OS 자체의 터미널 프롬프트에서 바로 실행하는 기능은 요즘에는 다른 프로그래밍 언어들에서도 종종 볼 수 있습니다. 제가 알기로 파이썬(Python)의 경우도 이와 같은 방식을 지원합니다. 따라서 프로그램 소스코드의 실행 방식에 있어서 좀 더 다양한 가능성이 생긴다는 점은 분명해 보입니다.


그런데 위에서 사용된 예제코드인 test1.pro는 텍스트 형태의 결과만 출력하는 경우였는데요. 만약 그래픽 표출을 하는 경우에는 어떻게 될까요? 예를 들어 다음과 같이 그래픽창을 띄우고 이미지를 표출하는 작업을 수행하는 test2.pro라는 예제코드를 작성해보았습니다.



이 예제코드를 위와 같은 방식을 사용하여 다음과 같이 실행해볼 수 있습니다. 이 경우 어떤 현상이 벌어지는지 한번 직접 확인해보시기 바랍니다.


idl -e test2


실제로 실행을 해보면 뭔가 그래픽창이 하나 뜨고 이미지가 그려지는 것은 확인이 됩니다. 다만 그 그래픽창은 금새 사라져 버리는 다소 희한한 현상을 목격할 수 있습니다. 사실 IDL 세션을 직접 띄우고 거기서 test2를 실행하면 동일한 모습의 그래픽창이 뜨는데, 이 경우에는 내가 그래픽창을 직접 제거하지 않는 한은 계속 살아남습니다. 하지만 방금처럼 터미널 프롬프트에서 직접 실행한 경우에는그래픽창이 떴다가 바로 사라져 버립니다. 따라서 결국은 다음 그림과 같은 모습만 덩그러니 남게 됩니다. 이것은 Direct Graphics 체계의 그래픽창의 특성이라고 이해하시면 될 것 같습니다. 이러한 그래픽창은 IDL 세션이 지속되는 동안에만 그 생명력을 유지할 수 있기 때문입니다.



그런데 DG가 아닌 NG(New Graphics) 기반의 그래픽창의 경우는 좀 다릅니다. 다음과 같이 NG 기반의 그래픽창을 띄우고 이미지를 표출하는 작업을 수행하는 test3.pro라는 예제코드를 위와 같은 방식으로 다음과 같이 실행해 봅시다.


idl -e test3



이 경우에는 그래픽창이 뜨자마자 바로 사라지지 않습니다. 직접 없애지 않는 한은 계속 살아남아 있습니다. 하지만 그래픽창에 가려진 원래의 터미널 창을 보면 그 비밀을 알 수 있습니다. 즉, 다음 그림에서 보는 것처럼, 터미널 프롬프트로 돌아오지 않고 IDL 세션이 계속 살아 있는 것을 확인할 수 있습니다.



물론 여기서 그래픽창을 직접 제거하면 그제서야 터미널 프롬프트로 돌아옵니다. 즉, 다음 그림과 같은 모습을 보게 됩니다.



이것은 NG 기반과 DG 기반의 그래픽창 구현에 있어서 각자의 특성에 따른 차이 정도로 이해하시면 됩니다. 사실 이렇게 그래픽창을 띄우고 그래픽 컨텐츠를 구현하는 작업에 있어서는 우리가 평상시에 하는 것처럼 IDL 세션을 띄운 상태에서 모든 작업들이 진행되도록 하는 것이 더 바람직합니다. 하지만 그래픽을 구현하는 작업이 포함되어 있는데도 좀전과 같이 터미널 프롬프트에서 진행되어야만 하는 경우라면, 그래픽을 구현하는 작업이 화면상이 아닌 메모리상에서만 진행되도록 하는 방식, 즉 Z-buffer 모드에서 작업이 되도록 코딩을 하는 것이 바람직합니다. Z-buffer 모드에서의 그래픽 구현 방법에 관해서는 제가 예전에 이 블로그에서 언급했던 적이 있으므로 이 내용들을 참조하시면 됩니다(DG, NG)


이와 같이 터미널 프롬프트상에서 IDL 소스코드를 직접 실행하는 방식은 큰 틀에서 보면 sav 실행파일을 만들어서 VM이나 RT로 실행하는 방식과 유사한 측면이 있습니다. 하지만 이 두 방식은 서로 차이가 좀 있는 것이 사실입니다. 전자의 경우는 그 PC에 IDL이 반드시 설치되어 있어야 한다는 전제가 있는 반면, 후자의 경우는 그 PC에 IDL이 설치되어 있거나 그렇지 않은 경우 모두에 대하여 적용이 가능하다는 차이가 있습니다. 따라서 수행해야 할 작업의 특성이나 배포 여부 등 여러가지 상황을 고려하여 둘 중 적합한 방향을 선택하는 것이 좋습니다.

반응형