alfred-2do를 얼추 끝내고 나서 스스로 배운 스킬(?)을 정리할 겸 작성하는 포스트.

모든 스크립트는 파이선3를 기준으로 작성.

1. Script Filter 입력받기

해당 영상을 참조

포인트는 import sys 이후에 sys.argv[1]로 입력을 저장할 수 있다는 것.

다음 액션으로 넘길 때에는 .json 파일을 권장하는데 그냥 늘 있는 json 형식으로 작성한 다음에 json.dump()를 이용해서 덤프한 뒤 print()로 넘기면 된다.

2. 정규식 re.searchre.split

파이선에서 정규식은 re를 임포트 한 뒤에 쓸 수 있는데 re.split은 주어진 입력값을 기준으로 앞뒤로 나누는 것이고, re.search는 주어진 값을 앞에서부터 찾는 기능. alfred-2do에서 re.split은 기준이 되는 키워드(at이라든가 on이라든가 @#같은 메타데이터들)를 별도의 공간으로 분리시키는 데 사용함. re.search는 날짜 속에서 년도를 입력했는지를 검출하는 데 사용했다.

고생했던 건 re.split의 경우는 입력값이 없으면 그냥 없나보다 하고 넘어가는데 re.search의 경우에는 에러를 뱉어내면서 멈춰버리던 것.

3. string으로 입력할 것

2Do는 url scheme을 이용할 때 모든 쿼리를 string으로 넣도록 주문하고 있다. 그리고 stringint는 결합이 안 된다든가 string 끼리는 (당연하게도) 크기 비교 같은 연산이 안 되는 문제가 있으니 자료형은 언제나 나를 괴롭게귀찮게 한다.

4. 현재 날짜

datetime 모듈에서 datetime 클래스를 임포트하면 현재 날짜를 나타낼 수 있다.

from datetime import datetime
today = datetime.now().weekday() #0123456
date_now = datetime.now().day #날짜
month_now = datetime.now().month #월
year_now = datetime.now().year #년도

모듈말고 클래스를 임포트할 것

5. if boolean

if 함수의 조건문은 boolean으로 판단되기 때문에 0과 1로 실행 여부를 결정할 수도 있다. 당연한 얘긴데 의외로 쓸 데가 많음.

6. try:except:

try: 쪽에서 에러가 나면 except: 이하의 코드를 실행하게 하는 구문. 에러가 나기 전까지는 코드를 실행하다가 나는 시점에 except:로 넘어가기 때문에 코드를 장막 뒤에 숨겨놓을 수 있다.

7. for문 내에서 element의 삭제

파이선에서 리스트 내의 element들은 list[0], list[1], list[2] 이런 식으로 구성되어 있기 때문에 for 문 작업 중에 그 element를 지워버리면 뒤에 있는 element가 자동으로 앞으로 내려온다(=list[1]이 list[0]이 되어버림). 그리고 for문은 list[0]에 대해서 작업을 끝냈기 때문에 (원래는 list[2]였던) list[1]에 대해서 작업을 수행하게 된다. 이전의 list[1]에 대해서는 작업을 수행하지 못하게 되어버린다.

8. 리스트와 string에서 요소 제거

리스트에서 해당하는 element를 제거하는 건 비교적 직관적이다. 리스트명.remove('element명')

반면 string에서 글자를 제거하는 건 보다 복잡하다. 다행히 위치를 알고 있고 그게 끝자락(앞이든 뒤든)이면 newstring = oldstring[시작위치:끝위치]처럼 하면 된다. 중간에 있다면 그 부분을 제외한 부분을 조합해서 새로운 문자열로 만들어야 한다. 당연히 모든 위치는 index number로 표기한다. 근데 한국어로 index number는 어떻게 부르지?

만약 조작할 문자의 위치를 아는 게 아니라 조작할 문자를 아는거라면 string.replace(바뀔 문자, 바꿀 문자, 갯수 제한)의 형식으로 바꿀 수 있다. 뒤에서부터라면 이번에는 배우지 않았으므로 패스. Stackoverflow에 이런 타래가 있었다.

9. 리스트 내의 항목들에 대해서 복수의 결과가 일치하는 경우

Stackoverflow 타래 참조

10. 특수문자 처리

파이선에서 *#는 별도의 의미를 갖는다.1 그런데 나는 이걸 문자열로 받아서 처리를 해야 했으니까. 아무리 찾아봐도 안 나오는데 생각보다 단순한 해답이 있었다. 그냥 \로 이스케이프 처리하고 ''로 감싸서 쓰면 된다. 그게 싫으면 \u0023 같이 유니코드로 쓰든가.

11. 외부 스크립트 실행하기.

알프레드에서 현재 윈도우가 브라우저인지를 체크하는 코드는 Applescript로 짜여져 있다. 그리고 맥 터미널에서는 osascript를 통해서 애플스크립트를 구동할 수 있다. 따라서 파이선->bash->Applescript의 워크플로우를 생각할 수 있다.

noplanlife 블로그 글

12. (끝으로)x-callback-url 실행하기

이건 일전에 적었던 적이 있다. 2Do의 URL scheme 전체 항목을 보기 위해서는 이 쪽을 참조

  1. 각각 곱셈 연산자와 주석처리를 나타내는 기호이다.