次のスクリプトがあるとします。
import ConfigParser
from datetime import datetime
import time
def write_stuff():
section = "test"
item = "oh hey there"
conf_filename = "test.conf"
conf = ConfigParser.ConfigParser()
conf.readfp(open(conf_filename, 'r', 0))
timestamp = datetime.now().strftime("%Y-%m-%d_%H%M%S")
conf.set(section, timestamp, item)
with open(conf_filename, "w", 0) as conf_file:
# time.sleep(1)
conf.write(conf_file)
write_stuff()
write_stuff()
write_stuff()
write_stuff()
次の図に示すように、ファイルには 1 つのエントリのみが書き込まれます。
$ touch test.conf
$ python tests.py # this is what I've named the above
$ $ cat test.conf
[test]
2012-10-10_231439 = oh hey there
ただし、time.sleep(1) のコメントを外すと、すべてのエントリが表示されます。奇妙なことに (とにかく、私には) これは、write_stuff() への呼び出しが 1 つあり、シェルからスクリプトをすばやく連続して呼び出した場合でも発生します。Python が終了すると、ディスクに保存されるものはすべてディスクに保存されると思います。どうしたの?
環境: Mac OS X 10.8 上の Python 2.7.3