I ran into this today and thought I'd share what I learned.

The syscall chflags does not exist in Linux, so when compiling Python it
notices this and does not provide os.chflags().

chattr(1) on the other hand uses an ioctl() of EXT2_IOC_SETFLAGS to set
the attributes (e2fsprogs-1.42.13's lib/e2p/fsetflags.c):

|         fd = open (name, OPEN_FLAGS);
|         if (fd == -1)
|                 return -1;
|         f = (int) flags;
|         r = ioctl (fd, EXT2_IOC_SETFLAGS, &f);
|         if (r == -1)
|                 save_errno = errno;
|         close (fd);

So you could (instead of executing chattr(1)) call Python's
fcntl.ioctl() to perform that action.

It would probably be very nice if Python's os.chflags() would DWIM (and
if someone brings this to Python please report here), but on the other
hand I can also understand the paradigm to keep low-level functions
"dumb", i. e. a function where the user expects that a simple syscall is
made should only do that and nothing more.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/969032

Title:
  Python os module lacks the chflags/lchflags methods

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/python2.7/+bug/969032/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to