2012-09-19 29 views
0

我想寫一個腳本來完成一些特定的工作,每次工作完成時,我想增加一個job_done_count 1,也就是說如果我運行腳本10次,job_done_count將是10在Python中實現一個全局配置

這是這個劇本的樣子,

#!/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在腳本中?

+1

你可以使用['pickle'](http://docs.python.org/library/pickle.html)將'job_done_count'保存到一個文件並在每次運行時恢復它 – Nemoden

+0

因此,如果我把'job_done_count '在腳本中,那麼無論如何我都不會得到正確的值。 – Alcott

+0

爲什麼?您首先從文件中獲取它,然後將其保存到文件中。爲什麼它會不正確? – Nemoden

回答

3

或以任何下列方式不使用泡菜並做到這一點。

用手

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

隨着json

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

或者有十億其他方法!

+0

十億個方法可能會高估一點。 ;-) – Keith

+1

是的,但節奏鹹菜 –

+0

什麼關於XML? :)我同意使用pickle在這裏是過度的,並導致一個不容易從其他語言檢查的文件。 –

3

可以picklejob_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) 
+0

您可能希望在保存醬菜之前增加'job_done_count'。 – mhawke

+0

這可能是有用的,謝謝! – Blender

+0

對於一個這樣的簡單整數,你真的不需要費心去醃製它。用'handler.write(str(job_done_count))'將它寫入文件,並用'int(handle.read())'恢復。簡單得多,任何其他程序也可以讀取和寫入文件。 – Keith