Windows and Linux compatible chmod
Project description
oschmod
Python chmod that works on Windows and Linux
Use oschmod to set permissions for files and directories on Windows, Linux and macOS. While Python's standard libraries include a simple command to do this on Linux and macOS (os.chmod()
), the same command does not work on Windows.
- Read more about oschmod on Medium
- For more background, have a look at the oschmod Wiki.
Usage
The problem is that on Linux and macOS, you can easily set distinct permissions for a file's owner, group, and all others. It takes one command and one mode, or, in other words, a number representing bitwise permissions for reading, writing, and executing. On Linux and macOS, you use the os
module and os.chmod()
.
Misleadingly, on Windows, os.chmod()
does not have the same effect and does not give a warning or error. You think you've protected a file but you have not.
For example, on Linux or macOS, to give a file owner read, write, and execute permissions and deny the group and others any permissions (i.e., equivalent of 700
), you can make a single call:
import os
import stat
os.chmod('myfile', stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
Running the same command on Windows does not achieve the same results. The owner isn't given any permissions and the group and others are not denied any permissions. All you can do is restrict anyone from deleting, changing or renaming the file. That's nothing like what os.chmod()
does.
However, using oschmod you can use the same command on Windows, macOS or Linux and get the same results:
import oschmod
oschmod.set_mode('myfile', stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
CLI
The oschmod
CLI works similarly to chmod
albeit with fewer options:
$ oschmod -h
usage: oschmod [-h] [-R] mode object
Change the mode (permissions) of a file or directory
positional arguments:
mode octal mode of the object
object file or directory
optional arguments:
-h, --help show this help message and exit
-R apply mode recursively
For example, to open up a file to the world, you can run this command:
$ oschmod 777 file_name
As another example, you can lock down a file to just the file owner:
$ oschmod 700 file_name
Installation
$ pip install oschmod
Changelog
0.2.4
Commit Delta: Change from 0.2.2 release
Released: 2020.04.21
Summary:
- Add command line interface (CLI).
0.2.2
Commit Delta: Change from 0.2.0 release
Released: 2020.04.21
Summary:
- Fix issue with account lookup failing with error (
No mapping between account names and security IDs was done.
).
0.2.0
Commit Delta: Change from 0.1.5 release
Released: 2020.04.20
Summary:
- Add recursive version of
oschmod.set_mode()
:oschmod.set_mode_recursive()
0.1.5
Commit Delta: Change from 0.1.4 release
Released: 2020.04.17
Summary:
- Create Linux version of permissions test (
oschmod.perm_test()
)
0.1.4
Commit Delta: Change from 0.1.0 release
Released: 2020.04.17
Summary:
- Revise Windows to keep permissions an object already has for SYSTEM/NT AUTHORITY and don't include those permissions in mode calculation.
- Fix various minor cosmetic issues.
0.1.0
Commit Delta: Change from 0.0.0 release
Released: 2020.04.15
Summary:
- Initial release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for oschmod-0.2.4-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 44c81752d3fe7e576c66452b34759ed7fb32c0ad8cf504987862f1ccbb24e13e |
|
MD5 | b3fe1abfb50cb9c024fd36541d76877e |
|
BLAKE2b-256 | 77cbce3fd02ca404ed848f44ede80dc1bea147e3f0c31e4340b858e77f4d9197 |