Python的os stat返回错误的inode值

时间:2016-01-06 21:38:17

标签: python linux filesystems stat inode

我正在运行CentOS Linux。

我使用专有文件系统创建一个目录:

$ mkdir fooDir

首先,我使用" ls -ldi"检查inode值:

$ ls -ldi
total 4
9223372036854783200 drwxrwxrwx 2 root root 4096 Jan  6 20:58 fooDir

然后,我确认同一个inode正在由' stat':

报告
$ stat /fooDir
  File: `/fooDir'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 14h/20d Inode: 9223372036854783200  Links: 2
Access: (0777/drwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-01-06 20:58:13.000000000 +0000
Modify: 2016-01-06 20:58:13.000000000 +0000
Change: 2016-01-06 20:58:23.000000000 +0000

然后我切换到在python的交互式提示符下运行并对目录运行om.stat:

$ python
Python 2.6.6 (r266:84292, Jun 18 2012, 14:18:47) 
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.stat("/fooDir")
posix.stat_result(st_mode=16895, st_ino=-9223372036854768416, st_dev=20L, st_nlink=2, st_uid=0, st_gid=0, st_size=4096, st_atime=1452113893, st_mtime=1452113893, st_ctime=1452113903)
>>> 

Python的om.stat返回的inode值与stat命令报告的值不匹配。

文件系统已将inode值9223372036854783200分配给目录' fooDir'但是Python的om.stat正在返回" -9223372036854768416"。

我可以把它当作一个有符号的值来处理它,因此也就是负号,但我对它为什么是一个完全不同的价值感到困惑。

关于这里发生了什么的任何想法?为什么Python的os stat返回错误的inode值? (或根据' stat'命令错误)

2 个答案:

答案 0 :(得分:2)

我想出了inode编号的意图 一个unsigned long,但是om.stat正在解释 作为负数,因为MSB已设定。

所以现在我知道它应该是一个未签名的, 我可以解决这个问题如下:

import ctypes
ctypes.c_ulong(os.stat(<dir here>).st_ino).value

这将返回与&#39; stat&#39;报告的值相同的值。 和&#39; ls -li&#39;。

答案 1 :(得分:0)

使用命令模块,它将返回相同的结果。

   import commands
   commands.getstatusoutput('stat /fooDir')