Python覆盖包含当前日期和时间的文件

时间:2015-01-30 17:42:46

标签: python

我是Python新手。我需要创建一个包含当前日期和时间的door.lock文件。此外,我需要每隔x分钟用一个包含当前日期和时间的新文件覆盖此文件。我正在使用它作为伪锁文件,允许我测试软件的运行情况,无论软件是否崩溃以及它多久前崩溃了。我的问题是我似乎无法覆盖该文件。我只是在创建和/或附加文件时失败了。我创建了以下测试:

    from datetime import datetime, timedelta

    ending = False

    LOCK_FILENAME = "door.lock"  # The lock file
    LOCK_FILE_UPDATE = True
    MINS_LOCK_FILE_UPDATE = 1  # the (x) time in minutes to write to lock file
    NEXT_LOCK_FILE_UPDATE = datetime.now()

    lock_file = open(LOCK_FILENAME, "w")
    now = datetime.now()
    NOW_STRING1 = str(now.strftime("%Y-%m-%d_%a_%H:%M"))
    lock_file.write(NOW_STRING1)
    print "First Now String"
    print NOW_STRING1

    # ==============================================================================
    #Main Loop:
    while ending is False:

    # ==============================================================================
      # Check if it is time to do a LOCK FILE time update
      now = datetime.now()
      NOW_STRING1 = str(now.strftime("%Y-%m-%d_%a_%H:%M"))
      if LOCK_FILE_UPDATE:  # if LOCK_FILE_UPDATE is set to True in DM settings
        if NEXT_LOCK_FILE_UPDATE <= datetime.now():
            lock_file.write(NOW_STRING1)
            print NOW_STRING1
            NEXT_LOCK_FILE_UPDATE = datetime.now() + timedelta(minutes=MINS_LOCK_FILE_UPDATE)

有人会为我查明我的错误吗? TIA

当我抓住上面的文件时,它是空的。

2 个答案:

答案 0 :(得分:1)

您需要将缓冲区推送到文件。您可以使用close()执行此操作,然后重新打开以进行下一次写入。

lock_file.close()
...
lock_file = open(LOCK_FILENAME, "a")

答案 1 :(得分:0)

如果您要记录事件,最好使用logger而不是纯文本文件。

来自@MAC的解决方案将起作用,除非它会追加并且似乎你不想这样做,所以只需使用'w'选项再次打开或更好,使用'w +'选项以便它可以被截断(我得到的就是你想做的事情并阅读。

此外,请考虑在关闭文件之前不会记下您的更改(已经说过,请考虑在您的循环中打开/关闭)。

lock_file = open(LOCK_FILENAME, "w+")
now = datetime.now()
NOW_STRING1 = str(now.strftime("%Y-%m-%d_%a_%H:%M"))
lock_file.write(NOW_STRING1)
# your loop and so on ...
lock_file.close()