Welcome, guest | Sign In | My Account | Store | Cart

This recipe shows how to create a simple alarm clock in Python, that can be run from the command line in a terminal. It lets you specify the alarm time in minutes as a command line argument, and prints a wake-up message and beeps a few times, after that time arrives. You can use 0 for the minutes to test it immediately, including to adjust the volume using your speaker controls.

Python, 56 lines
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# alarm_clock.py

# Description: A simple Python program to make the computer act 
# like an alarm clock. Start it running from the command line 
# with a command line argument specifying the duration in minutes 
# after which to sound the alarm. It will sleep for that long, 
# and then beep a few times. Use a duration of 0 to test the 
# alarm immediiately, e.g. for checking that the volume is okay.

# Author: Vasudev Ram - http://www.dancingbison.com

import sys
import string
from time import sleep

sa = sys.argv
lsa = len(sys.argv)
if lsa != 2:
    print "Usage: [ python ] alarm_clock.py duration_in_minutes"
    print "Example: [ python ] alarm_clock.py 10"
    print "Use a value of 0 minutes for testing the alarm immediately."
    print "Beeps a few times after the duration is over."
    print "Press Ctrl-C to terminate the alarm clock early."
    sys.exit(1)

try:
    minutes = int(sa[1])
except ValueError:
    print "Invalid numeric value (%s) for minutes" % sa[1]
    print "Should be an integer >= 0"
    sys.exit(1)

if minutes < 0:
    print "Invalid value for minutes, should be >= 0"
    sys.exit(1)

seconds = minutes * 60

if minutes == 1:
    unit_word = " minute"
else:
    unit_word = " minutes"

try:
    if minutes > 0:
        print "Sleeping for " + str(minutes) + unit_word
        sleep(seconds)
    print "Wake up"
    for i in range(5):
        print chr(7),
        sleep(1)
except KeyboardInterrupt:
    print "Interrupted by user"
    sys.exit(1)

# EOF

I created this because the alarm app on my smartphone app was too loud, even at the lowest volume setting. Also, this app is simple, and can be run in a terminal window, multiple times, with very little effort, to set different alarms at different times (sequentially, not in parallel) [1], just by hitting up arrow after the previous alarm rings, and then change the number (of minutes) at the end of the command line, and then hit Enter.

[1] You can also set multiple alarms (for different times) in parallel, but you have to do it by running the program separately in different command windows or terminals.

The program may not work from a GUI-based IDE, since it prints the ASCII BEL character - chr(7) to the terminal, and some GUIs / IDEs don't support that.

3 comments

Vasudev Ram (author) 8 years, 6 months ago  # | flag

More details and discussion about the recipe here:

https://jugad2.blogspot.in/2013/11/a-simple-alarm-clock-in-python-command.html

jblnchrd 7 years, 3 months ago  # | flag

Where is the beeping happening?

jblnchrd 7 years, 3 months ago  # | flag

nvm I see.