linux中stat函数的用法,os.stat()函数的用法

os.stat() 函数会给出一个文件或文件描述符(file descriptor)的各种状态信息,如权限,大小,所属用户和组,修改时间等。这个函数实际上是调用OS的系统调用stat()来实现功能,对应Linux中stat命令。函数的返回是一个os.stat_result对象。

os.stat()函数

下面这段代码来自Python官方页面:

>>> import os

>>> statinfo = os.stat('somefile.txt')

>>> statinfo

os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,

st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,

st_mtime=1297230027, st_ctime=1297230027)

>>> statinfo.st_size

264

os.stat()函数还可以接受symbolic link file作为入参。请看如下代码,c.txt是a.txt的一个软连接:

>>> os.stat('c.txt')

os.stat_result(st_mode=33204, st_ino=17693157, st_dev=64768, st_nlink=1,

st_uid=1000, st_gid=1000, st_size=0, st_atime=1560940275,

st_mtime=1560940275, st_ctime=1560940275)

os.lstat()函数

如果想要查询symbolic link file本身的信息,可以使用一个非常相似的函数,os.lstat()。 注意函数名称多了一个l字符。

>>> os.lstat('c.txt')

os.stat_result(st_mode=41471, st_ino=17693175, st_dev=64768, st_nlink=1,

st_uid=1000, st_gid=1000, st_size=5, st_atime=1560940339,

st_mtime=1560940338, st_ctime=1560940338)

看到区别了吗?st_size不一样。

os.fstat()函数

还有一个非常相似的函数 os.fstat() ,这个函数的输入是已打开文件的file number。

>>> fp = open('a.txt','r')

>>> os.fstat(fp.fileno())

os.stat_result(st_mode=33204, st_ino=17693157, st_dev=64768, st_nlink=1,

st_uid=1000, st_gid=1000, st_size=0, st_atime=1560940275,

st_mtime=1560940275, st_ctime=1560940275)

os.stat_result对象属性

以上三个stat函数的返回值,都是一个os.stat_result对象,我们有必要查看这个对象都有哪些属性。

st_mode,模式信息,这个信息确定了pathname对应的是一个目录,还是一个普通文件,或者是设备文件等等,还包括文件的访问权限。解析这个信息,需要用到stat模块的接口。

st_ino,与OS相关,在Linux平台下就是inode编号,在Win系统下就是file index。

st_dev,文件所在的设备ID。

st_nlink,hard link硬链接的数量。(理解Linux系统的硬链接和软链接)

st_uid,文件拥有者的UID。

st_gid,文件拥有者的GID。

st_size,文件大小,in bytes。

st_atime,最近一次的访问时间,单位秒。

st_mtime,最后修改时间,单位秒。

st_ctime,这个属性与OS平台有关。在Linux平台下,这个时间是最近一次修改文件metadata的时间,在Win平台下,这就是文件创建的时间。单位秒。

关于atime,mtime和ctime的更多介绍,请参考:atime,mtime和ctime。

>>> import os

>>> fs = os.stat('test.txt')

>>> fs

os.stat_result(st_mode=33204, st_ino=33656274, st_dev=64768,

st_nlink=1, st_uid=1000, st_gid=1000,

stime=1561119755, st_ctime=1561119755)

>>> fs.st_mode

33204

>>> fs.st_ino

33656274

>>> fs.st_dev

64768

>>> fs.st_nlink

1

>>> fs.st_uid

1000

>>> fs.st_gid

1000

>>> fs.st_size

11

>>> fs.st_atime

1561119758.582074

>>> fs.st_mtime

1561119755.6539743

>>> fs.st_ctime

1561119755.6539743

>>> dir(fs)

['__add__', '__class__', '__contains__', '__delattr__',

'__dir__', '__doc__', '__eq__', '__format__', '__ge__',

'__getattribute__', '__getitem__', '__getnewargs__',

'__gt__', '__hash__', '__init__', '__init_subclass__',

'__iter__', '__le__', '__len__', '__lt__', '__mul__',

'__ne__', '__new__', '__reduce__', '__reduce_ex__',

'__repr__', '__rmul__', '__setattr__', '__sizeof__',

'__str__', '__subclasshook__', 'count', 'index',

'n_fields', 'n_sequence_fields', 'n_unnamed_fields',

'st_atime', 'st_atime_ns', 'st_blksize', 'st_blocks',

'st_ctime', 'st_ctime_ns', 'st_dev', 'st_gid', 'st_ino',

'st_mode', 'st_mtime', 'st_mtime_ns', 'st_nlink',

'st_rdev', 'st_size', 'st_uid']

os.stat()函数的更多用法

先来看一下os.stat()函数的docstring:

>>> help(os.stat)

Help on built-in function stat in module nt:

stat(path, *, dir_fd=None, follow_symlinks=True)

Perform a stat system call on the given path.

path

Path to be examined; can be string, bytes, a path-like object or

open-file-descriptor int.

dir_fd

If not None, it should be a file descriptor open to a directory,

and path should be a relative string; path will then be relative to

that directory.

follow_symlinks

If False, and the last element of the path is a symbolic link,

stat will examine the symbolic link itself instead of the file

the link points to.

dir_fd and follow_symlinks may not be implemented

on your platform. If they are unavailable, using them will raise a

NotImplementedError.

It's an error to use dir_fd or follow_symlinks when specifying path as

an open file descriptor.

看得出来,上面的信息是从Win系统中打印出来的。

dir_fd参数,默认为None,如果不是None,path参数就是一个相对位置。

follow_symlinks,默认为True,表示follow symbolic link file,上面已经有示例代码了。

注意函数参数中的*符号,它表示dir_fd和follow_symlinks这两个参数在使用的时候,必须采用key=value的形式。这个函数参数定义的细节,请参考:函数参数定义中独立的*符号,什么意思?

-- EOF --

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值