Simple cross-platform wakelock written in Python. Prevent your computer from going to sleep in the middle of a long running task.
Wakepy currently supports
- Windows
- Linux (with
systemd
) - macOS
Feel free to submit pull request(s) for other platforms.
pip install wakepy
Running*
wakepy
or
python -m wakepy
starts the program. While running, computer will not go to sleep. If battery is running out, your OS might force laptop to sleep.
*needs wakepy >= 0.5.0
wakepy [-h] [-s]
optional arguments:
-h, --help show this help message and exit
-s, --keep-screen-awake Keep also the screen awake. On Linux, this flag is set on and cannot be disabled.
from wakepy import set_keepawake, unset_keepawake
set_keepawake(keep_screen_awake=False)
# do stuff that takes long time
unset_keepawake()
new in version 0.4.0
from wakepy import keepawake
with keepawake(keep_screen_awake=False):
... # do stuff that takes long time
keep_screen_awake
can be used to keep also the screen awake. The default isFalse
. On Linux, this is set toTrue
and cannot be changed.
The program simply calls the SetThreadExecutionState with the ES_SYSTEM_REQUIRED
flag, when setting the keepawake, and removes flag when unsetting. The flag cannot prevent sleeping if
- User presses power button
- User selects Sleep from the Start menu.
The program uses the systemctl mask
command to prevent all forms of sleep or hybernation when setting the keepawake, and unmasks the functions when unsetting keepawake. This command will remain active until keepawake is removed. The flag cannot prevent sleeping from user interaction. This action does require sudo privileges.
The program launches a caffeinate
in a subprocess when setting keepawake, and terminates the subprocess when unsetting. This does not prevent the user from manually sleeping the system or terminating the caffeinate process.
Windows | Linux | Mac | |
---|---|---|---|
wakepy uses | SetThreadExecutionState with the ES_SYSTEM_REQUIRED flag |
systemctl mask |
caffeinate |
sudo / admin needed? | No | Yes | No |
When process which called set_keepawake dies |
All flags set by the process are removed |
Nothing happens. | Nothing happens. |
keep_screen_awake option |
Optional Default: False |
Always True |
Optional Default: False |
When keep_screen_awake = True |
Screen is kept awake. Windows will not be locked automatically. |
Screen is kept awake. Automatic locking = ? |
Screen is kept awake. Automatic locking = ? |
Multiprocessing support | Yes | No | No |
When process calling set_keepawake dies |
All flags set by the process are removed. See: How will killing while lock set affect it? | ||
How to debug or see the changes done by wakepy in the OS? |
Run powercfg -requests inelevated PowerShell |
? | ? |
If on laptop, and battery low? | Sleep | ? | ? |
- wakepy has zero (python) dependencies
- wakepy is simple and it has a little amount of code. You can read the whole source code quickly
- It has permissive MIT licence
- It is multiplatform
- You can use it directly from command line, or within your python scripts
- It runs without admin/sudo priviledges on Windows and Mac.
- On Linux, the current solution using
systemctl
needs sudo priviledges. PRs to circumvent this are welcome. - Currently multiprocessing is not well supported on Mac and Linux (?); the first function calling
unset_keepawake
or releasing thekeepawake
context manager will allow the PC to sleep even if you have calledset_keepawake
multiple times. For these kind of cases, perhaps an implementation making mouse movement or pressing keyboard keys would work better.
- See CHANGELOG.md