我们从Python开源项目中,提取了以下14个代码示例,用于说明如何使用stat.st_gid()。
def copy(self, other): """Copy self to other. Also copies data. Other must be Path""" if self.isreg(): other.writefileobj(self.open("rb")) elif self.isdir(): os.mkdir(other.name) elif self.issym(): os.symlink(self.symtext, other.name) os.lchown(other.name, self.stat.st_uid, self.stat.st_gid) other.setdata() return # no need to copy symlink attributes elif self.isfifo(): os.mkfifo(other.name) elif self.issock(): socket.socket(socket.AF_UNIX).bind(other.name) elif self.isdev(): if self.type == "chr": devtype = "c" else: devtype = "b" other.makedev(devtype, *self.devnums) self.copy_attribs(other)
def copy_attribs(self, other): """Only copy attributes from self to other""" if isinstance(other, Path): if self.stat is not None: util.maybe_ignore_errors(lambda: os.chown(other.name, self.stat.st_uid, self.stat.st_gid)) util.maybe_ignore_errors(lambda: os.chmod(other.name, self.mode)) util.maybe_ignore_errors(lambda: os.utime(other.name, (time.time(), self.stat.st_mtime))) other.setdata() else: # write results to fake stat object assert isinstance(other, ROPath) stat = StatResult() stat.st_uid, stat.st_gid = self.stat.st_uid, self.stat.st_gid stat.st_mtime = int(self.stat.st_mtime) other.stat = stat other.mode = self.mode
def test_chown_uid_gid_arguments_must_be_index(self): stat = os.stat(support.TESTFN) uid = stat.st_uid gid = stat.st_gid for value in (-1.0, -1j, decimal.Decimal(-1), fractions.Fraction(-2, 2)): self.assertRaises(TypeError, os.chown, support.TESTFN, value, gid) self.assertRaises(TypeError, os.chown, support.TESTFN, uid, value) self.assertIsNone(os.chown(support.TESTFN, uid, gid)) self.assertIsNone(os.chown(support.TESTFN, -1, -1))
def getperms(self): """Return permissions mode, owner and group""" s1 = self.stat return '%s:%s %o' % (s1.st_uid, s1.st_gid, self.mode)
def perms_equal(self, other): """True if self and other have same permissions and ownership""" s1, s2 = self.stat, other.stat return (self.mode == other.mode and s1.st_gid == s2.st_gid and s1.st_uid == s2.st_uid)
def _test_all_chown_common(self, chown_func, first_param, stat_func): """Common code for chown, fchown and lchown tests.""" def check_stat(uid, gid): if stat_func is not None: stat = stat_func(first_param) self.assertEqual(stat.st_uid, uid) self.assertEqual(stat.st_gid, gid) uid = os.getuid() gid = os.getgid() # test a successful chown call chown_func(first_param, uid, gid) check_stat(uid, gid) chown_func(first_param, -1, gid) check_stat(uid, gid) chown_func(first_param, uid, -1) check_stat(uid, gid) if uid == 0: # Try an amusingly large uid/gid to make sure we handle # large unsigned values. (chown lets you use any # uid/gid you like, even if they aren't defined.) # # This problem keeps coming up: # http://bugs.python.org/issue1747858 # http://bugs.python.org/issue4591 # http://bugs.python.org/issue15301 # Hopefully the fix in 4591 fixes it for good! # # This part of the test only runs when run as root. # Only scary people run their tests as root. big_value = 2**31 chown_func(first_param, big_value, big_value) check_stat(big_value, big_value) chown_func(first_param, -1, -1) check_stat(big_value, big_value) chown_func(first_param, uid, gid) check_stat(uid, gid) elif platform.system() in ('HP-UX', 'SunOS'): # HP-UX and Solaris can allow a non-root user to chown() to root # (issue #5113) raise unittest.SkipTest("Skipping because of non-standard chown() " "behavior") else: # non-root cannot chown to root, raises OSError self.assertRaises(OSError, chown_func, first_param, 0, 0) check_stat(uid, gid) self.assertRaises(OSError, chown_func, first_param, 0, -1) check_stat(uid, gid) if 0 not in os.getgroups(): self.assertRaises(OSError, chown_func, first_param, -1, 0) check_stat(uid, gid) # test illegal types for t in str, float: self.assertRaises(TypeError, chown_func, first_param, t(uid), gid) check_stat(uid, gid) self.assertRaises(TypeError, chown_func, first_param, uid, t(gid)) check_stat(uid, gid)
def init_from_tarinfo(self, tarinfo): """Set data from tarinfo object (part of tarfile module)""" # Set the typepp type = tarinfo.type if type == tarfile.REGTYPE or type == tarfile.AREGTYPE: self.type = "reg" elif type == tarfile.LNKTYPE: raise PathException("Hard links not supported yet") elif type == tarfile.SYMTYPE: self.type = "sym" self.symtext = tarinfo.linkname elif type == tarfile.CHRTYPE: self.type = "chr" self.devnums = (tarinfo.devmajor, tarinfo.devminor) elif type == tarfile.BLKTYPE: self.type = "blk" self.devnums = (tarinfo.devmajor, tarinfo.devminor) elif type == tarfile.DIRTYPE: self.type = "dir" elif type == tarfile.FIFOTYPE: self.type = "fifo" else: raise PathException("Unknown tarinfo type %s" % (type,)) self.mode = tarinfo.mode self.stat = StatResult() """ Set user and group id use numeric id if name lookup fails OR --numeric-owner is set """ try: if globals.numeric_owner: raise KeyError self.stat.st_uid = cached_ops.getpwnam(tarinfo.uname)[2] except KeyError: self.stat.st_uid = tarinfo.uid try: if globals.numeric_owner: raise KeyError self.stat.st_gid = cached_ops.getgrnam(tarinfo.gname)[2] except KeyError: self.stat.st_gid = tarinfo.gid self.stat.st_mtime = int(tarinfo.mtime) if self.stat.st_mtime < 0: log.Warn(_("Warning: %s has negative mtime, treating as 0.") % (util.ufn(tarinfo.name))) self.stat.st_mtime = 0 self.stat.st_size = tarinfo.size