project:ccleanerautoupdate
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| project:ccleanerautoupdate [2013/04/20 07:53] – [설정 파일] changwoo | project:ccleanerautoupdate [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 5: | 줄 5: | ||
| CCleaner는 개인이 집에서 무료로 이용할 수 있는 ' | CCleaner는 개인이 집에서 무료로 이용할 수 있는 ' | ||
| - | 그런데 쓰다 보면 이 무료 버전의 자동 업데이트 미지원이 은근히 귀찮습니다. 대략 2-3주, 길면 한 두달에 한 번 생각날 때마다 한 번 정도 사용하는데 거의 이 주기가 지나면 적어도 1번쯤은 프로그램의 업데이트가 되어 있죠. 그래서 사실상 CCleaner를 사용할 때마다 먼저 업데이트부터 | + | 그런데 쓰다 보면 이 무료 버전의 자동 업데이트 미지원이 은근히 귀찮습니다. 대략 2-3주, 길면 한 두달에 한 번 생각날 때마다 한 번 정도 사용하는데 거의 이 주기가 지나면 적어도 1번쯤은 프로그램의 업데이트가 되어 있죠. 그래서 사실상 CCleaner를 사용할 때마다 먼저 업데이트부터 |
| - | 하지만 여전히 무료로 사용하고 싶지만, 이 귀찮음을 감수하시는 분들이 계실 터입니다. 살짝 반칙 같지만, 그래서 약간 제작사인 Piriform에 미안한 맘이 들지만, | + | 하지만 여전히 무료로 사용하면서, 이 귀찮음을 |
| - | 사실 얼마전부터 CCleaner의 유료 버전인 CCleaner Professional을 사용중입니다. 이 버전은 자동 업데이트가 지원되어 편하게 사용할 수 있지만, 사실 무료 버전의 CCleaner와 별다른 차이가 없습니다. 자동 업데이트가 지원되지 않는 점만 감안하면 무료 버전도 충분히 쓸만합니다. 사실 그렇게 큰 차이도 없는데 돈을 지불한 것이 조금 아깝기까지도 합니다. | + | 사실 얼마전부터 CCleaner의 유료 버전인 CCleaner Professional을 사용중입니다. 이 버전은 자동 업데이트가 지원되어 편하게 사용할 수 있지만, 사실 무료 버전의 CCleaner와 별다른 차이가 없습니다. 자동 업데이트가 지원되지 않는 점만 감안하면 무료 버전도 충분히 쓸만합니다. 사실 그렇게 큰 차이도 없는데 돈을 지불한 것이 조금 아깝기까지도 합니다. 이번에도 역시 파이썬 |
| - | + | ||
| - | 이번에도 역시 파이썬 스크립트를 사용합니다. CCleaner는 윈도우 기반의 소프트웨어이므로 이 스크립트는 윈도우에서만 동작한다고 가정합니다. | + | |
| ===== 작업 방법 ===== | ===== 작업 방법 ===== | ||
| 줄 83: | 줄 81: | ||
| ccleaner_path: | ccleaner_path: | ||
| release_url: | release_url: | ||
| - | relaese_re: | + | relaese_re: |
| download_url: | download_url: | ||
| - | download_re: | + | download_re: |
| install_arg: | install_arg: | ||
| </ | </ | ||
| - | ==== 로컬 | + | |
| - | ==== 온라인 | + | ==== 본 구현 ==== |
| - | ==== 파일 다운로드 및 설치 스크립트 | + | <code python CCleanerAutoUpdate.py> |
| - | ==== 위 세 스크립트를 동작시키는 스크립트 | + | # -*- coding: UTF-8 -*- |
| + | import sys | ||
| + | import os | ||
| + | import urllib2 | ||
| + | import re | ||
| + | |||
| + | def GetHTML(URL): | ||
| + | obj = urllib2.urlopen(URL) | ||
| + | html = obj.read() | ||
| + | obj.close() | ||
| + | return html | ||
| + | |||
| + | # Version 확인을 위한 클래스 | ||
| + | class Version: | ||
| + | |||
| + | major = None | ||
| + | minor = None | ||
| + | build = None | ||
| + | |||
| + | # 로컬 | ||
| + | def FromLocalVersionString(self, | ||
| + | vers | ||
| + | self.major | ||
| + | self.minor | ||
| + | self.build | ||
| + | |||
| + | # 최신 버전 (웹페이지에서 확인한) 문자열 읽음 | ||
| + | def FromCurrentVersionString(self, | ||
| + | vers = currentVersionString.split(' | ||
| + | self.major | ||
| + | self.minor | ||
| + | self.build = int(vers[2]) | ||
| + | |||
| + | def __str__(self): | ||
| + | return ' | ||
| + | |||
| + | # 로컬 버전 <= 최신버전이므로 !=, == 만 정의. | ||
| + | def __eq__(self, | ||
| + | return isinstance(other, | ||
| + | |||
| + | def __ne__(self, | ||
| + | return not self.__eq__(other) | ||
| + | |||
| + | |||
| + | def CheckUpdate(config): | ||
| + | # check CCleaner.exe exists! | ||
| + | if os.path.exists(config[' | ||
| + | print >> sys.stderr, '%s does not exist!' | ||
| + | return 1 | ||
| + | |||
| + | # local ccleaner version | ||
| + | print " | ||
| + | command | ||
| + | os.system(command) | ||
| + | |||
| + | # get version | ||
| + | with open(' | ||
| + | text | ||
| + | iv_txt | ||
| + | |||
| + | # current release version | ||
| + | print ' | ||
| + | release_html | ||
| + | release_exp | ||
| + | release_srch | ||
| + | |||
| + | cv_txt | ||
| + | reldate | ||
| + | |||
| + | # To canonical versino expression. | ||
| + | installed_ver | ||
| + | current_ver | ||
| + | |||
| + | installed_ver.FromLocalVersionString(iv_txt) | ||
| + | current_ver.FromCurrentVersionString(cv_txt) | ||
| + | |||
| + | print ' | ||
| + | print ' | ||
| + | |||
| + | # compare two | ||
| + | if installed_ver | ||
| + | print ' | ||
| + | return 0 | ||
| + | else: | ||
| + | print ' | ||
| + | |||
| + | # download current release | ||
| + | download_html | ||
| + | download_exp | ||
| + | download_srch = download_exp.search(download_html) | ||
| + | |||
| + | url = download_srch.groups()[0] | ||
| + | filename | ||
| + | |||
| + | print 'Begin downloading...' | ||
| + | obj = urllib2.urlopen(url) | ||
| + | with open(filename, | ||
| + | f.write(obj.read()) | ||
| + | obj.close() | ||
| + | |||
| + | print ' | ||
| + | |||
| + | cmd = filename + ' ' + config[' | ||
| + | |||
| + | print ' | ||
| + | os.system(cmd) | ||
| + | print ' | ||
| + | return 0 | ||
| + | |||
| + | def ParseConfig(configfile): | ||
| + | config = {} | ||
| + | with open(configfile, | ||
| + | for l in f: | ||
| + | colon = l.find(':' | ||
| + | prop | ||
| + | val | ||
| + | |||
| + | config[prop] = val | ||
| + | |||
| + | return | ||
| + | |||
| + | def main(argv): | ||
| + | |||
| + | # parse config file | ||
| + | configfile = ' | ||
| + | if len(argv) == 2: | ||
| + | configfile = argv[1] | ||
| + | config = ParseConfig(configfile) | ||
| + | |||
| + | # begin the job | ||
| + | return CheckUpdate(config) | ||
| + | |||
| + | if __name__ == ' | ||
| + | sys.exit(main(sys.argv)) | ||
| + | </ | ||
| ===== 끝마치며 ===== | ===== 끝마치며 ===== | ||
| - | 참으로 잉여롭습니다. 혹시나 CCleaner 설치라는 혹을 떼려다가 스크립트 관리라는 혹을 붙인 게 아닌가 싶습니다. 하지만 호기심을 | + | 참으로 잉여롭습니다! :-) 혹시나 CCleaner 설치라는 혹을 떼려다가 스크립트 관리라는 혹을 붙인 게 아닌가 싶습니다. 하지만 호기심을 |
| ===== 참고자료 ===== | ===== 참고자료 ===== | ||
project/ccleanerautoupdate.1366444430.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)
