Urwid – ncurses 노가다를 없애줬다..;ㅅ;

요즘 보면 터미널 한경에서 여러모로 보여주는 그래픽 라이브러리들이 많이 존재한다는 걸 깨닫는다. 예전에는 ncurses로 구현하느라 상당히 힘들게 했었는데, 요즘 나오는 툴들은 그래픽 처리에서 파이썬을 많이 이용하여 처리하는 것을 볼 수 있다.

이번에 블로그 글을 쓰면서 소개하는 라이브러리 또한 터미널 환경에서 그래픽 화면을 만들어서 처리할 수 있도록 하는 라이브러리이다. 파이썬으로 만들 수 있다보니 여러모로 쉽고 빨리 짤 수 있으면서 별도의 추가 코드들은 연동해서 쓸 수 있도록 해줬다.

20180307_174224

이건 내가 도큐먼트를 보고 직접 따라해본 터미널 환경이다. 그전의 원래 환경과 전혀 다른 형태의 터미널 화면을 그려봤다.

이 화면은 그래프를 그려본 것이다. 이정도면 네트워크 패킷 분석 프로그램 짤 때 쉽게 보여줄 수 있는 툴을 만들 수 있을 거 같다.

이런 류의 라이브러리가 여러모로 존재하는 거 같은데, 이런 걸 잘 알고 쓰면 ncursess의 미친듯한 노가다를 이길 수 있지 않을까 싶다. ;ㅅ;

파이썬 허접 규링이 본 파이썬 3 vs 파이썬 2.7

규링은 그냥 파이썬을 쓸 줄만 안다. 어느정도 필요한 유틸 만들고 하는 정도로만 쓰지 그보다 더 제대로 하냐고 물으면 아니다. (규링의 자바 실력과 마찬가지다. 앱 개발따윈 할 수 있지만 자바 특유의 디자인 패턴법이나 그런 건 잘 모른다.)

게다가 이 글을 쓰는 시기가 좀 여러모로 규링이 힘든 시기인데…. 머리 좀 식히고 맘 좀 바꿔보고 하려고 규링이 봤을 때 확실하게 차이나는 코드 규칙들을 적어보려 한다. 책에서는 더 자세히 나와있겠지만, 규링이 직접 코드 짜면서 확인한 것들은 이것들인데, 아마 이게 다인 거 같기도 하다.

  • print

print는 가장 먼저 배우는 출력할 문자열을 처리하는 함수다. 이 함수를 이용할 때, 파이썬 3에서는 괄호를 이용하도록 바뀌어 있다.

3: print (“Hello Kyuling”)
2.7: print “Hello Kyuling”

파이썬을 나중에 배운 친구들은 파이썬 2의 경우에 2.7 기반으로 배운 친구들이 많다. 그들은 저 괄호를 쓰는 걸 이상하게 여기지 않는다. 그러나, 그 전 버전의 파이썬을 쓰던 친구들은 아마 알 것이다. 2.6.x까진 괄호 쓰면 에러난다.

  • line break

줄바꿈은 print 함수에 항상 문자열 마지막을 줄바꿈 문자인 ‘\n’으로 만들어준다. 그러나, 줄바꿈을 하지 않고 싶을 경우가 생기기도 하는데, 그럴 경우에 이용하는 방법이 존재하는데, 이 부분에서 서로 다른 구조를 가진다.

3: print (“no more words.”, end=” “);print (“OK”)
2.7 print “no more words.”,;print “OK”

파이썬 3에는 end 파라미터를 지정하면 끝에 문자를 별도로 지정할 수 있다. 지정하지 않으면 기본 문자로 줄바꿈이 실행된다. 반면 파이썬 2.7에서는 문자열의 끝에 콤마를 이용하면 된다.

  • Automatic type conversion

파이썬 3에서는 숫자 연산 시 자동으로 형 변환이 진행된다. 단, 2.7의 경우에는 형 변환을 지정하지 않으면 일반 안된다. 2를 배울 때 숫자 연산 부분에서 많은 이야기를 하는 부분이다.

3:
>>> 3 / 4
0.75

2.7:

>>> 3 / 4
0
>>> 3 / 4.0
0.75

  • input / raw_input

파이썬 3의 input 함수와 파이썬 2.7의 raw_input 함수는 동일한 함수다. 근데 파이썬 2.7에서 존재하던 input 함수는 3에는 존재하지 않는다. (왜 이딴 식으로 헷갈리게 만들어 썅!!!)

3: taste = input(“맛이 어떠한가요:”)
2.7: taste = raw_input(“맛이 어떠한가요:”)

  • code encoding

파이썬 3에서는 utf-8이 기본 소스코드 인코딩이다. 그러나 2.7에서 기본 소스코드 인코딩을 urf-8으로 이용하기 위해서는 소스코드 첫 줄에 다음과 같은 문자열을 적어야 한다.

# -*- coding: utf-8 -*-

개인적으로는 안적어도 된다는 거 자체만 해도 무지 좋다.

  • error handling

try … except … 를 이용하여 에러를 처리할 때, 에러 변수명 e에 대해서 표기하는 방법이 조금 차이가 있다.

3:
try:
4 / 0
except ZeroDivisionError as e:
print (e)

2.7:
try:
4 / 0
except ZeroDivisionError, e:
print (e)

단순한 에러 상황을 만들어보았다. 3에서는 에러 타입 뒤에 as라고 작성하고, 2.7에서는 e라고 작성하면 된다. 규링은 3가 되어서 저렇게 바뀐 쪽을 더 좋아한다. 코드가 더 명확한 느낌이 나서 좋다고 본다.

일단 규링이 아는 부분에 대해서는 이 정도가 전부다. 그 외에 책들에서는 여러 부분이 다르다고 알려주겠지만, 이 내용들은 확실하게 차이가 나는 내용들이다. 그러므로 가장 조심해야 되는 부분이라 생각하고, 이 내용을 제외하면 버전에 상관 없는 코드를 만들 수 있다고 본다.

파이썬의 두 가지 코딩 모드 – 셸 & 코드 편집기

파이썬의 설치에 대해서는 넘기도록 하겠습니다. 파이썬 홈페이지에서 다운로드 해서 설치하는 것이 너무 잘 나와있어서 굳이 똑같은 걸 쓸 이유는 모르겠군요.

일단 파이썬을 설치하게 되면 파이썬 인터프리터와 표준 라이브러리, 그리고 IDLE(아이들이라고 읽으시면 됩니다.)가 설치됩니다. 이 IDLE는 통합 개발 환경을 말합니다. IDLE은 대화형 파이썬 셸(Python Shell)과 코드 편집기 두 가지 모드로 사용이 가능합니다. 짧은 예시의 경우에는 간단하게 셸에서 작성하여도 되지만 코드가 길어지고 하다 보면 코드 편집기를 더더욱 활용하게 될 것입니다.

코딩 모드의 차이를 보여드리기 위해서 예시를 준비했습니다. 프로그램 시작시 간단하게 쓰는 Hello World를 출력하겠습니다. IDLE를 실행해주세요.

제 작업환경이 요즘 맥이라서 맥에서 보여드립니다. (어느 것이 더 편하다고는 말 못하겠습니다만 여러분에 파이썬 설치 후 PATH 설정까지 했다면 윈도우가 더 편할수도 있습니다. 쓰기 나름이죠.) 처음 뜨는 저 화면이 바로 파이썬 쉘 화면입니다. 쉘 화면에 >>> 표시가 뜨지 않으면 엔터키를 입력하면 뜰 겁니다. 그리고 여기에 print(“Hello World”) 라고 입력하고 엔터를 치면 그대로 결과가 출력됩니다. 세미콜론 입력 안해도 되는데 전 습관적으로 입력했군요.

print() 라는 함수는 그대로 해당 내용을 출력하라는 함수입니다. 그래서 안에 내용을 출력하였습니다. 그런데, 파이썬의 셸에서는 print의 도움 없이도 숫자나 텍스트를 출력할 수 있습니다. 숫자의 경우에는 그대로 입력하고 엔터를 치면 그대로 출력이 될 것이고, 텍스트의 경우에는 ‘ ‘, ” ” 안에 내용을 입력하여야 합니다. 그렇지 않으면 파이썬 코드인 줄 알고 실행했다가 에러를 발생합니다.

이 기능은 사실 변수 안에 어떤 값이 있는지 확인하기 위해서 자주 쓰입니다. 전용 셸이 있는 인터프리터 언어들은 대부분 이런 기능을 가지고 있습니다.

그럼 이제 코드 편집기를 실행해 보도록 하겠습니다. 코드 편집기는 IDLE 창에서 [file] -> [new file] 메뉴를 클릭하면 코드 편집기가 따로 나타납니다. 그리고 아래의 화면을 나타난 코드 편집기에 hello world를 출력하는 문장을 그대로 입력하였습니다.

그냥 파이썬의 소스 코드를 그대로 쭉 입력하여 파일로 저장하면 됩니다. 파이썬 코드의 확장자는 py입니다. 그리고 실행의 경우에는 코드 편집기 상태에서 F5 키를 누르거나 [run] -> [run module] 메뉴를 실행하면 실행할 수 있습니다. 아래 예시에서는 파일의 내용이 실행되는 것을 보여드리기 위해서 별도로 만들어서 실행하였습니다.

마지막으로 파이썬 코드를 작성한 다음에는, 각 운영체제의 커멘드 라인 인터페이스 환경에서 실행할 수 있습니다. 윈도우라면 명령 프롬프트에서, 리눅스, 유닉스, 맥에서는 터미널에서 실행할 수 있습니다. 해당 코드가 있는 위치로 이동하여 코드를 실행합니다.

이상으로 파이썬 코드의 실행에 대한 가장 기본적인 것을 살펴보았습니다. 파이썬은 은근 빨리빨리 나갈 수 있어서 금방 내용이 올라갈 것입니다.

Non-ASCII Character Error in Python

걍 주석 영어로 대충 달아도 되는 정도의 코드면 별 상관도 안했을텐데… 주석 양이 좀 더 길어지고 하면 내가 좀 더 쉽게 알아보기 위해서라도 한글로 주석을 달아주고 싶었다. 그래서 한글로 주석을 쭉 달아서 돌렸는데 이런 오류가 난다.

코드 내부에 있는 한글을 제대로 읽어들이질 못해서 나는 오류다. 한글만 그럴까요? ASACII 아니면 다 오류납니다.

…..장난하나.

그래서 일단 해결책을 찾았다. 해결책은 무지 간단했다. 파이썬 코드 윗줄에 다음 문장을 입력하면 된다.

# -*- coding: utf-8 -*-

ㅡㅅㅡ

주석처럼 처리되지만 신경쓰지 말고 그대로 쓰면 된다. ㅁ뭐, 언어 처리기가 만들어질 때 부터 이렇게 된 거라면 뭐… 걍 매 파일마다 써줘야지. ㅠㅠ