Python: как напечатать datetime.datetime.now () каждую секунду в файле? - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу записывать Datetime каждую секунду в цикле while, но он записывает один раз дважды из-за цикла.

Примечание: я не хочу использовать time.sleep(), потому что это сделает целое времяцикл осуществлен.

Пример моей проблемы в текстовом файле:

register : user 1 at 13:30:34 

register : user 1 at 13:30:34

Ответы [ 4 ]

0 голосов
/ 28 декабря 2018

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

def save_datetime(file='date.txt', user=getpass.getuser()):
    with open(file, 'a+') as f:
        f.write('register: ' + user + '\t' + str(datetime.datetime.now().time()) + '\n')

Теперь нам нужна функция для цикла.

def threadingtime_every_sec(sec=60):
    import threading, time
    def loop():
        while True:
            save_datetime()
            time.sleep(sec)
    threading.Thread(target=loop).start()

Я понимаю, что вы не хотите использовать time.sleep (), но поскольку он запускает поток, он не заметен и поэтому запускается отдельно.Полный сценарий будет выглядеть так:

import datetime
import getpass
import threading
import time

def save_datetime(file='date.txt', user=getpass.getuser()):
    with open(file, 'a+') as f:
        f.write('register: ' + user + '\t' + str(datetime.datetime.now().time()) + '\n')

def threadingtime_every_sec(sec=60):
    def loop():
        while True:
            save_datetime()
            time.sleep(sec)
    threading.Thread(target=loop).start()

if __name__ == '__main__':
    threadingtime_every_sec(1)

Я бы настоятельно рекомендовал этот ответ и этот вопрос , поскольку он дает вам несколько способов - и гораздо лучшую систему потоков, использующуюTimer функция и класс.Полный сценарий в вашем случае будет:

import threading
import time
import getpass
import datetime

class RepeatedTimer(object):
  def __init__(self, interval, function, *args, **kwargs):
    self._timer = None
    self.interval = interval
    self.function = function
    self.args = args
    self.kwargs = kwargs
    self.is_running = False
    self.next_call = time.time()
    self.start()

  def _run(self):
    self.is_running = False
    self.start()
    self.function(*self.args, **self.kwargs)

  def start(self):
    if not self.is_running:
      self.next_call += self.interval
      self._timer = threading.Timer(self.next_call - time.time(), self._run)
      self._timer.start()
      self.is_running = True

  def stop(self):
    self._timer.cancel()
    self.is_running = False

def save_datetime(file='date.txt', user=getpass.getuser()):
    with open(file, 'a+') as f:
        f.write('register: ' + user + '\t' + str(datetime.datetime.now().time()) + '\n')

if __name__ == '__main__':
    RepeatedTimer(1, save_datetime)

Это создаст пример текстового файла, подобного этому:

register: james 11:51:54.988595
register: james 11:51:55.988939
register: james 11:51:56.988767

Если вы не хотите, чтобы миллисекунды заменили str(datetime.datetime.now().time()) на datetime.datetime.now().strftime('%H:%M:%S').

0 голосов
/ 28 декабря 2018

Пожалуйста, попробуйте это и используйте запись файла соответственно

 import datetime

 start_time = datetime.datetime.now()
 print(start_time)
 while True:
    if (datetime.datetime.now() - start_time).seconds == 1:
       start_time = datetime.datetime.now()
       print(start_time)
0 голосов
/ 28 декабря 2018

Если я понял, вы хотите добавлять время каждую секунду, пока остальной код работает.

Чтобы добиться этого, вам лучше создать поток.Многопоточность позволяет вам запускать код, когда вы используете sleep() в коде.

0 голосов
/ 28 декабря 2018

Попробуйте этот код!

Вы можете использовать gmtime для печати времени, а для каждой второй задержки вы можете использовать функцию sleep(), импортируя библиотеку time.

from time import gmtime, strftime
import time

while True:
    print(strftime("%H:%M:%S", gmtime()))
    time.sleep(1)

Выход:

11:10:23                                                                                                               
11:10:24                                                                                                               
11:10:25                                                                                                               
11:10:26                                                                                                               
11:10:27                                                                                                               
11:10:28                                                                                                               
11:10:29                                                                                                               
11:10:30 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...