Quiero código simple reloj digital en el interprete de python. Quiero evitar el uso de tkinter, si es posible. Esto es lo que tengo actualmente;

import time
while True:
    from datetime import datetime
    now = datetime.now()  
    print ("%s/%s/%s %s:%s:%s" % (now.month,now.day,now.year,now.hour,now.minute,now.second)) 
    time.sleep(1)

Esto produce un recurrente imprimir, algo como esto;

06/29/16 23:08:32

06/29/16 23:08:33

06/29/16 23:08:34

Sé que esto es crudo, todavía estoy aprendiendo. Sólo quiero una línea con un «marcando» el reloj digital en la shell. Estoy usando python 3.5.1 en idle y windows 10.

Si esto no es posible, me gustaría mucho que saber por qué.

Más cordiales gracias

  • Posibles duplicados de Reemplazar la salida de la consola de python
  • No creo que usted va a tener mucha suerte con esta en idle, yo recomendaría que usted olvidarse completamente inactivo y el uso de ipython o uno de los muchos buenos python Ide’ como pycharm etc..
InformationsquelleAutor DanMcGrew | 2016-05-29

4 Comentarios

  1. 10

    Si vas a imprimir una longitud fija de salida, como cada vez, usted puede utilizar el carácter de retorno de carro para rebobinar hasta el principio de la línea, siempre y cuando no se imprime un salto de línea. Ejemplo:

    # Note trailing comma, that suppresses the newline in Python
    print ("%s/%s/%s %s:%s:%s" % (now.month,now.day,now.year,now.hour,now.minute,now.second)),
    
    # Now rewind back to the start of the line. Again, not trailing comma
    print("\r"),

    Ahora, usted también puede darse cuenta de que nada es siempre impreso en la pantalla. Esto es debido a que la salida estándar se almacenan en la memoria, así que usted puede enjuagar con esto:

    # At the top...
    import sys
    
    # In the loop, after the first print
    sys.stdout.flush()

    Todo esto funciona de la siguiente manera. Imagino que no es en realidad un cursor en la pantalla. Que de primera impresión el tiempo con la primera impresión (y el color), a continuación, mueva el cursor al principio de la línea con print("\r"),. En realidad no eliminar ninguno de los caracteres, sólo se mueve el cursor. Usted, a continuación, escribir la próxima vez de nuevo. Porque se muy bien que pasa a ser de la misma duración, el momento en que se escriben de nuevo, en sustitución de los antiguos personajes.

    La secuencia de comandos resultante es entonces de la siguiente manera:

    import time
    import sys
    
    while True:
        from datetime import datetime
        now = datetime.now()
        print ("%s/%s/%s %s:%s:%s" % (now.month,now.day,now.year,now.hour,now.minute,now.second)),
        sys.stdout.flush()
        print("\r"),
        time.sleep(1)

    Si quieres más fino control sobre lo que está pasando, usted puede comenzar a usar las maldiciones de la biblioteca, pero me imagino que es excesivo para lo que estamos tratando de hacer aquí.

    EDIT: Como @PadraicCunningham se menciona en los comentarios, la sintaxis correcta para suprimir la nueva línea de impresión en Python 3 y la fuerza de los contenidos a ras de la pantalla es la siguiente:

    print("hello", flush=True, end="")

    También, como @AlexHall menciona, la instrucción print en realidad no imprimir un ancho fijo declaración; para hacer esto, debemos utilizar strftime() lugar.

    Por lo tanto, el programa correcto es:

    import time
    
    while True:
        from datetime import datetime,strftime
        now = datetime.now()
        print (strftime("%m/%d/%Y %H:%M:%S"), end="", flush=True)
        print("\r", end="", flush=True)
        time.sleep(1)
    • Usted puede establecer el flush=True en la función de impresión pero no creo que hagas lo que hagas va a funcionar en ralentí
    • gracias, no me di cuenta de que era una opción. No estoy seguro acerca de INACTIVIDAD de mí mismo, y lamentablemente no tienen que mentir en torno a la prueba. En no el trabajo en el Python REPL aunque.
    • di cuenta de OS X hace realidad la nave con el REPOSO. Tristemente no funciona, y dado esta respuesta, creo que no hay una manera de conseguir que funcione. Aún así, para el OP, este método funciona si se ejecuta desde el símbolo del sistema.
    • No se preocupe, la OP es el uso de python3.5 así también establecer end="" para eliminar los saltos de línea, de la memoria yo no creo que esto funcionaba en modo inactivo, creo que la instalación de idlex puede hacer el truco idlex.sourceforge.net
    • Huy, estoy todavía se utiliza para Python 2. Actualizado, aunque, saludos 🙂
    • Uso strftime en lugar de este manual el formato (que no funciona para los dos dígitos por cierto). Necesito ni flush=True ni sys.stdout.flush() cuando lo pruebe esto en la terminal con python3, y que hemos incluido al final. Usted dijo Python 2 en su edición, pero creo que quiso decir 3. Mueva el datetime import para la parte superior.
    • huy, eliminado .flush(). Como por la necesidad de flush=True, que depende por completo de su plataforma. Linux y OS X libc normalmente los búferes de salida, y sólo vacía en la pantalla en una nueva línea; no estoy 100% seguro de Windows comportamiento.
    • Estoy usando OSX. Pero sí, yo entiendo que podría variar. Sólo señalándolo.

  2. 1

    intentado esto en repl.es, esto funcionó para mí…( añadido comas & ahora.strftime )

    import time
    from datetime import datetime
    while True:   
        now = datetime.now()
        print (now.strftime("%m/%d/%Y %H:%M:%S"), end="", flush=True),
        print("\r", end="", flush=True),
        time.sleep(1)
    
  3. 0

    Todo lo que necesitas es:

    from time import strftime
    while True:
        print (strftime("%m/%d/%Y %H:%M:%S"), end="", flush=True)
        print("\r", end="", flush=True)
        time.sleep(1)
  4. 0

    El código siguiente está trabajando para mí.

    from time import sleep
    from datetime import datetime
    while True:
        now = datetime.now()
        stdout.write(now.strftime("\r%m/%d/%Y %H:%M:%S")),
        stdout.flush()
        sleep(1)
    stdout.write("\n")

Dejar respuesta

Please enter your comment!
Please enter your name here