2011-11-19 6 views
4

날짜가 오래된 이미지를 삭제하는 스크립트가 있습니다.Python에서 스크립트에 날짜를 전달하려면 어떻게해야합니까?

스크립트를 실행하기 위해 호출 할 때이 날짜를 인수로 전달할 수 있습니까?

예 :이 스크립트 delete_images.py는 날짜 (YYYY-MM-DD)

python delete_images.py 2010-12-31 

스크립트보다 오래된 이미지를 삭제하는

import os, glob, time 

root = '/home/master/files/' # one specific folder 
#root = 'D:\\Vacation\\*'   # or all the subfolders too 
# expiration date in the format YYYY-MM-DD 

### I have to pass the date from the script ### 
xDate = '2010-12-31' 

print '-'*50 
for folder in glob.glob(root): 
    print folder 
    # here .jpg image files, but could be .txt files or whatever 
    for image in glob.glob(folder + '/*.jpg'): 
     # retrieves the stats for the current jpeg image file 
     # the tuple element at index 8 is the last-modified-date 
     stats = os.stat(image) 
     # put the two dates into matching format  
     lastmodDate = time.localtime(stats[8]) 
     expDate = time.strptime(xDate, '%Y-%m-%d') 
     print image, time.strftime("%m/%d/%y", lastmodDate) 
     # check if image-last-modified-date is outdated 
     if expDate > lastmodDate: 
      try: 
       print 'Removing', image, time.strftime("(older than %m/%d/%y)", expDate) 
       os.remove(image) # commented out for testing 
      except OSError: 
       print 'Could not remove', image 

답변

16

빠른을 (고정 된 날짜 (xDate 변수)와 함께 작동) 그러나 원유 방식은 sys.argv을 사용하는 것입니다.

import argparse 

parser=argparse.ArgumentParser() 
parser.add_argument('xDate') 
args=parser.parse_args() 

는 그런 다음 args.xDate 대신 xDate 사용하려는 사용자가 제공 한 값에 액세스 할 수 :

import sys 
xDate = sys.argv[1] 

보다 강력한, 확장 방법은 argparse 모듈을 사용하는 것입니다.

사용자가 적절한 입력을 제공하지 않을 경우 사용자 유형

delete_images.py -h 

그것은 또한 도움이 오류 메시지를 제공 할 때 자동으로 무료 도움말 메시지를 얻을 argparse 모듈을 사용.

xDate에 대한 기본값을 쉽게 설정할 수 있으며 xDatedatetime.date 개체로 변환하고 TV 에서처럼 "훨씬 더!"로 쉽게 설정할 수 있습니다.


내가 나중에 스크립트에서 볼 한 번 튜플에 xDate 문자열을 변환 할

expDate = time.strptime(xDate, '%Y-%m-%d') 

를 사용합니다. argparse으로이 작업을 수행 할 수 있으므로 args.xDate은 자동으로 시간 튜플입니다. 예를 들어,

import argparse 
import time 

def mkdate(datestr): 
    return time.strptime(datestr, '%Y-%m-%d') 
parser=argparse.ArgumentParser() 
parser.add_argument('xDate',type=mkdate) 
args=parser.parse_args() 
print(args.xDate) 

이 같이 실행하면

% test.py 2000-1-1 

time.struct_time(tm_year=2000, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=1, tm_isdst=-1) 

PS를 산출한다. 당신이 (sys.argv에 또는 argparse)를 사용하도록 선택하든 방법, 좋은 아이디어는 for-loop

expDate = time.strptime(xDate, '%Y-%m-%d') 

외부 당겨하는 것입니다. xDate 값은 절대로 변경되지 않으므로 expDate 만 계산하면됩니다.

2

명령 줄 옵션은 sys.argv 목록을 통해 액세스 할 수 있습니다. 따라서 간단하게 사용할 수 있습니다

xDate = sys.argv[1] 

(sys.argv[0]은 현재 스크립트의 이름입니다.)

1

조금 더 폴란드어 : 다음 링크를 참조하시기 바랍니다

import argparse 
import time 

def mkdate(datestr): 
    try: 
    return time.strptime(datestr, '%Y-%m-%d') 
    except ValueError: 
    raise argparse.ArgumentTypeError(datestr + ' is not a proper date string') 

parser=argparse.ArgumentParser() 
parser.add_argument('xDate',type=mkdate) 
args=parser.parse_args() 
print(args.xDate) 
관련 문제