본문 바로가기

개발/Python

[Python] '-u'로 보기 좋게 인자(argument) 정리하기

python을 터미널에서 실행할 때, 여러 옵션과 해당하는 인자를 주어 실행할 수 있다는 사실을 최근에 논문 코드 작업을 하며 알게 되었다.

 

python -h를 입력해보면 이렇게 많은 옵션이 있는 것을 확인할 수 있다.

 

간단한 코드를 실행하는데는 이렇게 많은 옵션을 필요로 하지는 않는다. 하지만 제공되는 옵션을 사용함으로써, 보다 더 유연한 python 코드 실행이 가능해진다.

 

오늘 포스팅에서는 이렇게 많은 python의 실행 옵션 중 중요한 내용은 아니지만 코드 작성에 편의성을 줄 수 있는 옵션이라 생각하는 -u 옵션에 대해서 소개하고자 한다.

 


 

-u 옵션의 내용을 확인해보면

바이너리 입출력의 stdout과 stderr를 버퍼에 올리지 않는다. stdin만을 항상 버퍼에 올린다. 텍스트 입출력은 줄 바꿈으로 버퍼에 올라간다.정도로 해석할 수 있다. stdout, stderr이 버퍼에 올라가지 않고, stdin이 버퍼에 올라가고와 같이 어려운 내용을은 차치해두고 텍스트 입출력은 줄바꿈으로 버퍼에 올라간다는 구문에 집중해보자.

 

 

python 코드는 실행 시 코드에서 사용되는 인자(argment)를 입력하여 사용할 수 있다.

 

python main.py --arg1 arg1 --arg2 arg2 --arg3 arg3 --arg4 arg4 --arg5 arg5 --arg6 arg6 --arg7 arg7 --arg8 arg8 --arg9 arg9 --arg10 arg10

 

인자의 수가 많지 않은 경우에는 큰 상관이 없지만, 인자가 매우 많을 경우 코드의 실행 시 매 번 인자를 작성해야 하는 불편함을 겪게 된다. 이를 편하게 하기 위해 사용할 수 있는 방법 중 하나가 shell script로 작성하여 python 코드를 실행하는 것이다.

 

vim 편집기를 사용하여 작성한 shell script

 

위와 같은 실행 코드를 main.sh이라는 shell script파일로 작성하면 위와 같이 작성할 필요 없이 shell script에서 인자를 수정한 후 bash main.sh만 치면 동일한 동작을 수행할 수 있다.

 

하지만 인자의 수가 많으면 shell script에서 (IDE에 따라 다르지만) 인자의 수가 많을 경우 줄이 옆으로 넘어가게 되고 이는 사소한 불편함으로 이어진다. 잠시 여담을 섞자면, 개인적으로 이런 사소한 불편함이 작업의 능률에 영향을 주는 요소 중 하나라고 생각한다. 괜히 개발자들이 터미널과 IDE, 나아가서는 작업 환경을 자신이 편하게 개발할 수 있는 환경으로 맞추는게 아니라고 생각한다.

 


 

이런 불편함을 해소하기 위해 가장 쉽게 생각할 수 있는 방법은 무엇일까 ?

 

\를 통해 줄 바꿈을 진행한다.

 

사람마다 다르겠지만 필자의 경우는 줄 바꿈을 통해 이런 인자들의 줄을 맞추는 것을 선호한다. 아까의 줄줄이 소세지 보다는 훨씬 더 잘 정리된 모습을 확인할 수 있다. 그렇다면 "불편함이 완전히 해소된 것 아니냐 !" 라고 물어볼 수 있겠지만, 아쉽게도 아니다. 이렇게 작성한 shell script를 실행할 경우에는 인자가 제대로 전달되지 않는다.

python의 옵션과 인자는 공백, 즉 space 키를 기준으로 옵션과 인자가 인식되어 실제 실행하는 코드에 전달된다. 하지만 shell script에서는 space가 아닌 줄 바꿈(enter)로 옵션들이 구분되어 있기 때문에 정상적으로 옵션에 따른 인자를 제대로 인식하지 못한다. 그렇기 때문에 코드가 정상적으로 실행되지 않는 것이다.

 

여기서 우리는 -u 옵션에서 확인했던 "텍스트 입출력은 줄 바꿈으로 버퍼에 올라간다."는 것을 떠올려야 한다. python 코드는 공백을 기준으로 각각 서로 다른 토큰이 되어 버퍼에 올라가 실행이 되게 된다. -u 옵션을 사용하게 되면 이 공백이 아닌 줄 바꿈을 기준으로 각 옵션과 인자가 버퍼에 올라가서 실행이 되게 된다는 뜻이다.

 

-u를 python과 실행한 python 파일 사이에 넣어준다.

 

이와 같이, -u 옵션을 사용하고 줄 바꿈으로 옵션과 인자를 작성하면, 정상적으로 잘 동작한다.

 


 

정리

  • 인자가 많은 python 코드에서는 편리하게 실행하기 위해 shell script를 작성하여 실행하는 경우가 있다.
  • 인자가 많으면, shell script에서 인자들을 한 눈에 보기 불편하다는 단점이 있다.
  • -u 옵션을 사용하면 보기 좋게 shell script를 정리할 수 있다.
반응형