본문 바로가기
프로그래밍 언어/Mathematica

[Mathematica] Linux terminal에서 프로그램 실행

by UltraLowTemp-Physics 2021. 3. 18.
728x90

일반적으로 Mathematica는 윈도우에서 사용할 경우 frontend 환경인 Mathematica Notebook으로 작업을 한다. 하지만, 계산량이 큰 작업의 경우 혹은 원격으로 작업을 하는 경우라면 Mathematica notebook으로 계산을 하는 것이 아닌, C/C++과 같이 terminal background에서 계산이 진행되길 원한다. 다행스럽게, Mathematica에서도 terminal에서 작업을 할 수 있다. 


기본적으로 terminal에서 작업을 하는 경우, terminal의 명령어는 "math"이다. 리눅스 terminal에서 math를 입력하면 아래와 같이 Mathematica Kernel이 실행된다. 이러한 Mathematica Kernel 작업환경은 python과 동일하다고 생각하면 될 것 같다. 

그림 1. Linux mathematica Kernel

하지만 우리가 원하는 것은 위와 같은 환경에서 작업을 하는 것이 아닌, Mathematica code가 포함된 script file을 커널 환경에서 실행시키는 것이다. 그러기 위해선 Mathematica code가 포함된 파일의 확장자가 .nb가 아닌 .m이어야한다. 

간단한 예시로써, 아래와 같은 mathematica code file이 있다고 하자. 

a) 파일 이름: example.m 

(* ::Package:: *)

\[Nu]=0.25;
\[Rho]=1.7;
l=100;
q=157.5;
p=175;
a= 9.8;
H=8;

G[h_]:=\[Rho] (p^2) (1+I \[Delta]) ((q/p+(1-q/p)(1-h))^2)

\[Lambda][h_]:=(2 \[Nu])/(1-2 \[Nu]) G[h]
\[Lambda][2]
AppendTo[$Echo, "Stdout"]

 

b) 스크립트 파일 실행 [1][2]
위 코드를 terminal 환경에서 실행시키고자 한다면 아래와 같이 명령어를 입력하면 된다. 

  (1) math -run < example.m 
     - 위 명령어는 다음 명령어와 동일함: math -run "<<example.m" 
     - 위 명령어를 통해 스크립트를 실행하면, 그림 1과 같이 REPL* 인터페이스 내에서 실행된다. 
     * REPL (Read-Evaluate-Print loop)
       • 하나의 입력을 받아서(Read single input), 처리하고(Evaluate), 결과를 반환하는(Print result) 환경으로 구현된 프로그램
       • 커맨드라인 인터페이스를 가지는 프로그램
  (2) math -run -noprompt "<<my-mathematica-script.m" 
     - prompt없이 스크립트가 실행됨 
     - 만일, nohup 명령어와 같이 쓰면 Mathematica 스크립트를 터미널의 background에서 실행시킬 수 있다. 
       : nohup math -run "<<my-mathematica-script.m" 

만일 실행 결과물 혹은 로그를 확인하고자 한다면, 아래와 같이 명령어를 입력하면 된다. 

math -noprompt -run < script.m > log.txt

 

(1)과 (2)을 실행시켰을 때, 아래와 같이 나온다. 

 

 

 

Reference: 
[1] openmetric.org/til/programming/run-mathematica-script-in-terminal/  
[2] www.maths.cam.ac.uk/computing/software/mathematica/mathematica-bg

728x90

댓글