삽질일지.

윈도우즈의 파일 이름에서는 공백문자와 \기호를 허용한다. 문제는, \기호는 탈출문자이고, 공백에도 의미가 있다는 점이다.

내가 하려고 한 것은 여러개의 tif파일을 bmp로 바꾸는 프로그램을 Imagemagick을 사용하여 만드는 것이었다.

cmd에서는 다음과 같이 명령을 하면 잘 된다.

D:\>convert source.tif target.bmp


문제는 이걸 파이썬에 넣었을 때의 문제였다.

os.system("convert " + source + " " + target)


위와 같이 넣으면 매개변수가 틀리다면서 오류가 나온다.

그래서 대체 뭐가 틀렸길래 하면서

D:\>convert

이렇게 쳤더니 Imagematick의 convert에 대한 설명이 쭉 나온다.

그래서, 파이썬에서
os.system("convert /?")


이렇게 실행시켰더니 FAT를 NTFS로 바꾸는 것에 관한 설명이 나왔다. 아뿔싸. 윈도우즈 기본 유틸에도 convert가 있구나. 그럼 cmd창에서 convert만 쳤을 때에도 저게 나와야지 왜 이때와 저때에 다른 명령어가 실행되는 것인가.

그래서.

os.system("C:\Program Files\ImageMagick-6.7.4-Q16\convert.exe" + source + " " + target)


이렇게 했더니 C:\Program은 명령어가 아니랜다. 뭣이?

한참을 고민한 끝에, 윈도우즈에서 빈칸이 어떤 의미인가 깊이 생각한 후 다음과 같은 처방을 내렸다.

os.system('\"C:\\Program Files\\ImageMagick-6.7.4-Q16\\convert.exe\" ' + source + " " + target)   


자세히 보면 \가 여러개 추가되어 있는 것을 발견할 수 있으며, 큰따옴표와 작은따옴표가 뒤섞여 있는 것을 발견할 수 있다. 파이썬에서 큰따옴표와 작은따옴표는 다른 의미를 갖고 있는데, 그에 대해서는 각자 탐구해 보도록 하자.

빈칸을 파일 이름에 허락하면서 동시에 빈칸을 매개변수들의 구분자로 사용한 멍청한 MS의 뻘짓에 나 또한 삽질을 하였다.

신고
by snowall 2012.01.03 15:07
  • solariser 2012.01.11 05:34 신고 ADDR EDIT/DEL REPLY

    다른 방법을 추천 합니다. idolovelinux.tumblr.com/post/15630298123

    • snowall 2012.01.11 09:27 신고 EDIT/DEL

      다음에 쓸 일이 생겼을 때 기억나면 써봐야겠군요
      근데 복잡하네요