Python: как я могу заставить скрипт писать в файл, когда он запущен, а затем оставаться открытым для записи при нажатии клавиши?

Я пытаюсь написать скрипт, который, когда я его запускаю, будет записывать текущее время в файл, а затем я хочу, чтобы он оставался открытым в фоновом режиме, чтобы каждый раз, когда я нажимаю клавишу «Вставить», он записывал текущее время до файла минус 7 минут.

У меня обе эти функции работают так, как я хочу, однако они работают только по отдельности. Например, он будет писать только время, когда я его запускаю, если я выделю блок, который держит его открытым в поисках нажатия клавиши (для этого я использую pyhook). И он останется открытым только для поиска нажатия клавиши, если я выделю часть, которая запишет время, когда я впервые запустил его. Вот мой код

import pyHook, pythoncom
from datetime import datetime

#writes the time when it starts bit
t = datetime.now()
h = t.hour
m = t.minute
s = t.second

if h > 12:
    h = h - 12

if m < 10:
    m = str(m).zfill(2)

file = open('time.txt', 'w')
file.write('Jeremiah got on at ' + str(h) + ':' + str(m))


#stays open and looks for a keypress bit
hookManager = pyHook.HookManager()

def OnKeyboardEvent(event):
    keyPressed = event.KeyID
    if keyPressed == 45:
        t = datetime.now()
        h = t.hour
        m = t.minute
        s = t.second

        if h > 12:
            h = h - 12

        if m < 10:
            m = int(str(m).zfill(2))

        if m - 7 < 0:
            h = h - 1
            sub = m - 7
            m = 60 + sub
        else:
            m = m - 7

        file = open('time.txt', 'w')
        file.write('Jeremiah got on at ' + str(h) + ':' + str(m))
    return True


hookManager.KeyDown = OnKeyboardEvent
hookManager.HookKeyboard()
pythoncom.PumpMessages()

Если я не выделю ни одного раздела, он очистит текстовый файл при запуске, а затем останется открытым для поиска нажатия клавиши. Выделение только раздела времени запуска будет держать его открытым для правильного поиска ключа и не очистит текстовый файл. Так что я почти уверен, что это какая-то проблема, что как только он начинает искать ключ, он очищает файл, но я не совсем уверен, почему, тем более что он даже не должен запускать какой-либо код, чтобы сделать с текстовым файлом, пока ключ нажимается, запуская мое if заявление.

Возможно ли иметь эти два в одном сценарии, или мне нужно разделить их и назвать их обоими с помощью .bat или что-то в этом роде?

Заранее спасибо.

(также, если вам интересно, с какой стати мне нужна программа, которая это делает, я должен делить настольный компьютер со своими братьями и сестрами, и мы отслеживаем, как долго мы были вместе, записывая время, когда мы добрались. Таким образом, я должен быть в состоянии автоматизировать это, а также иметь способ незаметно установить свое время вперед, когда меня попросят выйти.)


person Jeremiah Crowell    schedule 21.10.2015    source источник


Ответы (2)


Я понял. Мне просто пришлось закрыть файл после записи в него в разделе автозагрузки.

file = open('time.txt', 'w')
file.write('Jeremiah got on at ' + str(h) + ':' + str(m))
file.close()
person Jeremiah Crowell    schedule 21.10.2015

Чтобы упростить задачу, вы можете сделать это, чтобы вам не приходилось беспокоиться о закрытии файла, потому что он просто закроется сам по себе.

With open ('time.txt', 'w') as file:
    file.write('Jeremiah got on at ' + str(h) + ':' + str(m))
person gerj    schedule 14.12.2017