user72055
user72055

Reputation: 489

Python overwrite file containing current date and time

I am new to Python. I need to create a door.lock file that contains the current date and time. Also, I need to overwrite this file every x minutes with a new file containing the current date and time. I'm using this as a pseudo lock file to allow me to test on run of the software whether or not the software crashed and how long ago it crashed. My issue is I can't seem to overwrite the file. I've only failed at creating and/or appending the file. I created the following as a test:

    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)

Will someone pinpoint my error(s) for me? TIA

When I cat the above file, door.lock, it is empty.

Upvotes: 0

Views: 257

Answers (2)

user2113422
user2113422

Reputation:

If you are logging events you'd be better using a logger instead of a plain text file.

Solution from @MAC will work except it will append and seems that you don't want to do that so just open again with the 'w' option or yet better, use the 'w+' option so it can be truncated (which for what I get it is what you want to do) and read.

Also, consider your changes won't get written down until you close the file (having said that, consider open/close inside your loop instead).

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()

Upvotes: 0

MAC
MAC

Reputation: 429

You need to push buffer to file. You can do it with a close() and re-open for next write.

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

Upvotes: 1

Related Questions