Python';s os stat返回错误的索引节点值

Python';s os stat返回错误的索引节点值,python,linux,filesystems,stat,inode,Python,Linux,Filesystems,Stat,Inode,我正在运行CentOS Linux 我使用专有文件系统创建一个目录,如下所示: $ mkdir fooDir 首先,我使用“ls-ldi”检查索引节点值: 然后,我确认“stat”正在报告相同的inode: $ stat /fooDir File: `/fooDir' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 14h/20d Inode: 9223372036854783200 Li

我正在运行CentOS Linux

我使用专有文件系统创建一个目录,如下所示:

$ mkdir fooDir
首先,我使用“ls-ldi”检查索引节点值:

然后,我确认“stat”正在报告相同的inode:

$ 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”命令错误)

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

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

我发现inode的编号是 一个未签名的long,但om.stat正在解释 因为已设置MSB,所以将其设置为负数

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

import ctypes
ctypes.c_ulong(os.stat(<dir here>).st_ino).value
导入ctypes
ctypes.c_ulong(os.stat().st_ino).value
这将返回与“stat”报告的值相同的值
和“ls-li”。

您说您使用的是专有文件系统。也许这就是问题所在?这个inode数字看起来太大了。这些数字相当于mod 2**64“我可以处理它将其视为有符号值,因此是负号”。从有符号到无符号的转换不仅仅是添加/删除符号前缀。如果进行正确的转换,这两个数字是相同的。请阅读其中的一些参考资料:和。在Python2.x中会发生这种情况,因为在Python3.8.6中它工作正常。您可能是对的,但这并不能回答问题,因为在这种情况下,您只需绕过python“os.stat()”命令谢谢您的回答。是的,这可能是一个很好的解决办法。但仍然没有回答这个问题。
import ctypes
ctypes.c_ulong(os.stat(<dir here>).st_ino).value