2016-10-30 5 views
0

Ich habe wirklich Mühe zu verstehen, warum es nicht so funktioniert, wie ich denke, es sollte.Warum wird meine Druckfunktion verzögert?

Bearbeiten: Sorry für jede Verwirrung, es ist die erste print, die nicht ausgeführt werden. print('The alarm will sound at ' + result, flush=True)

Nichts passiert, bis if time.strftime('%H:%M') == result True ist. Egal wo ich die Druckfunktion einsetze, es wird nicht ausgeführt, bis das obige erfüllt ist. Sogar innerhalb der while Schleife, es wird nicht laufen.

#! /usr/bin/python 

import argparse 
import time 
import datetime 

def alarm(set_time): 

    set_time = str(set_time)[:2]+ ':' + str(set_time)[2:] 
    alarm_time = datetime.datetime.strptime(set_time,'%H:%M').strftime('%H:%M') 
    return alarm_time 

def main(): 

    parser = argparse.ArgumentParser() 
    parser.add_argument('wake', help='The time for the alarm to sound', type=str) 
    args = parser.parse_args() 

    result = alarm(args.wake) 
    print('The alarm will sound at ' + result, flush=True) 

    while True: 

     if time.strftime('%H:%M') == result: 
      print('Wake up') 
      return 
     else: 
      time.sleep(1) 
      pass 

if __name__ == '__main__': 
    main() 
+0

Ist das nicht die Idee? Ich meine ... Nichts wird passieren, bis die aktuelle Zeit mit der Zeit übereinstimmt, in der der Alarm ertönen wird? Weiß nicht ... Vielleicht vermisse ich etwas ... – BorrajaX

+0

Bleib dran; Sagen Sie, dass der Alarm nicht zur angegebenen Zeit aktiviert wird oder dass er nur zur angegebenen Zeit aktiviert wird? – TigerhawkT3

+0

Es tut mir leid, ich habe den zweiten 'Print' vergessen. Umbenennung Es ist das erste 'print', das erst ausgeführt wird, wenn das oben genannte True ist. –

Antwort

0

Ich empfehle Ihnen die Änderung unten. Es funktioniert gut.

import argparse 
import time 
import datetime 

def main(): 

    parser = argparse.ArgumentParser() 
    parser.add_argument('wake', help='The time for the alarm to sound', type=str) 
    args = parser.parse_args() 


    time_part = args.wake.split(':') 

    d = datetime.datetime.now() 

    wake_time = datetime.datetime(d.year, d.month, d.day, int(time_part[0]), int(time_part[1]), 0, 0) 


    print('The alarm will sound at ' + args.wake, flush=True) 

    while True: 

     if datetime.datetime.now() > wake_time: 
      print('Wake up') 
      return 
     else: 
      time.sleep(1) 
      pass 

if __name__ == '__main__': 
    main() 
+0

Der OP-Code funktioniert auf meinem Rechner einwandfrei - zumindest was den Druck angeht. Nicht sicher, wie dies das Problem löst. – tdelaney

+0

Nick Bonne, vielleicht können Sie versuchen, einen anderen Druck auf sonst zwingen. So etwas wie 'print (' ', end =' ') '. Der 'print ('Der Alarm ertönt bei' + args.wake, flush = True)' funktioniert immer für mich. – andercruzbr

Verwandte Themen