0

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.

1
  • 1
    You have to close the file or it wont write to it Commented Jan 30, 2015 at 17:46

2 Answers 2

1

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")
Sign up to request clarification or add additional context in comments.

1 Comment

Using "a" will create a log file, but if you just need a tag, "w" is fine.
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.