2012-09-19 3 views
0

작업이 완료 될 때마다 특정 작업을 수행 할 스크립트를 작성하고 싶습니다. job_done_count 스크립트를 10 회 실행하면 job_done_count을 1 씩 증가시키고 싶습니다. 10이됩니다.파이썬에서 전역 구성 구현

이이 스크립트는 같은 모습입니다,

#!/usr/bin/env python 

job_done_count = 0 
... 

if __name__ == '__main__': 
    do_the_job() 
    job_done_count += 1 

나는 종류의 작동 여부를 궁금해. 왜냐하면 스크립트를 실행할 때마다 job_done_count은 0으로 설정되고 1로 설정되기 때문입니다. 작업이 수행되는 횟수가 기억 나지 않습니다.

나는 job_done_count을 스크립트에 넣지 않겠습니까?

import os, pickle 

if os.path.exists('job_count.pickle'): 
    with open('job_count.pickle', 'rb') as handle: 
     job_done_count = pickle.load(handle) 
else: 
    job_done_count = 0 

... 

if __name__ == '__main__': 
    do_the_job() 
    job_done_count += 1 

    with open('job_count.pickle', 'wb') as handle: 
     pickle.dump(job_done_count, handle) 
+1

['pickle'] (http://docs.python.org/library/pickle.html)을 사용하여'job_done_count'를 파일에 저장하고 실행할 때마다 복원 할 수 있습니다. – Nemoden

+0

그래서'job_done_count '스크립트에서는 올바른 값을 얻을 수 없습니다. – Alcott

+0

왜? 먼저 파일에서 가져온 다음 파일에 저장합니다. 왜 그것이 틀렸을까요? – Nemoden

답변

3

을 또는 다음과 같은 방법으로 피클을 사용하지 마 :

+0

10 억 가지 방법이 약간 과소 평가 될 수 있습니다. ;-) – Keith

+1

그래,하지만 피클 치기 –

+0

xml은 어떨까요? :) 나는 피클 사용을 과도하다고 여기며 다른 언어에서 검사하기 쉽지 않은 파일을 만듭니다. –

3

당신은 파일에 job_done_count 변수를 pickle 수 있습니다.

with open("jobs_done.json") as inp: 
    job_done_count = json.load(inp)['jobs_done'] 

아니면 억 다른 방법으로 json

with open("jobs_done.txt") as inp: 
    job_done_count = int(inp.read().strip()) 

으로

!

+0

피클을 저장하기 전에'job_done_count'를 증가시키고 싶을 수도 있습니다. – mhawke

+0

유용 할 수도 있습니다. 감사합니다! – Blender

+0

그런 단순한 정수의 경우 실제로 산세 염려가 필요 없습니다. 'handler.write (str (job_done_count))'로 파일에 쓰고'int (handle.read()) '로 복원하면됩니다. 훨씬 더 간단하고 다른 프로그램도 파일을 읽고 쓸 수 있습니다. – Keith

관련 문제