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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
#!/usr/bin/env python3
import os
import sys
import argparse
from datetime import datetime, timedelta, time as type_time, date as type_date
from subprocess import check_output,CalledProcessError,STDOUT
import re
def yn(msg, default=False):
default_msg = "[Y/n]" if default else "[y/N]"
while True:
sys.stdout.write("%s %s " % (msg,default_msg))
c = input().lower()
if c == '':
return default
elif c in ("y", "ye","yes"):
return True
elif c in ("n", "no"):
return False
else:
sys.stdout.write("Please respond with yes/y or no/n\n")
def valid_time(s):
try:
a = datetime.strptime(s, "%H:%M")
return True
except ValueError:
return False
def check_shutdown():
try:
cmd = check_output(["/bin/systemctl","status","systemd-shutdownd.service"])
#Shutodwn is scheduled
r = re.findall(r'Status: \"(.*)\"\n', cmd.decode())[0]
print(r)
except CalledProcessError as e:
#Shutdown is not scheduled
print("Shutdown is not scheduled")
def cancel_shutdown():
try:
cmd = check_output(["/sbin/shutdown","-c"])
except CalledProcessError as e:
sys.exit("Error aborting shutdown: %s" % e)
def execute_shutdown(time, reboot = True, ask=True):
if not ask:
action = "reboot" if reboot else "poweroff"
if not yn("Are you sure you want to %s this system?" % action):
sys.exit(0)
if not (time.isdigit() or valid_time(time) or time.lower() == "now"):
sys.exit("minutes (45), valid time (12:34) or 'now' needs to be specified")
action = "-r" if reboot else "-P"
cmd = check_output(["/sbin/shutdown",action,time],stderr=STDOUT)
print(cmd.decode().split(",",1)[0])
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--yes", "-y",
help="dont as for shutdown",
action="store_true",
dest="yes")
action = parser.add_mutually_exclusive_group(required=True)
action.add_argument("--reboot", "-r",
help="Reboot the system",
nargs="?",
metavar="Minutes|HH:MM")
action.add_argument("--poweroff", "-p",
help="Poweroff the system",
nargs="?",
metavar="Minutes|HH:MM")
action.add_argument("--cancel", "-c",
help="Cancel pending shutdown",
action="store_true")
action.add_argument("--check",
help="Check pending chutdown",
action="store_true")
args = parser.parse_args()
try:
if args.reboot:
execute_shutdown(args.reboot, reboot=True, ask=args.yes)
if args.poweroff:
execute_shutdown(args.poweroff, reboot=False,ask=args.yes)
if args.cancel:
cancel_shutdown()
if args.check:
check_shutdown()
except KeyboardInterrupt:
sys.exit("Interrupted")
if __name__ == "__main__":
main()
|