Python 对于大文件,os.path.getsize()返回负文件大小(对于大于3GB的文件大小)

Python 对于大文件,os.path.getsize()返回负文件大小(对于大于3GB的文件大小),python,linux,Python,Linux,我在运行Linux2.6.32的嵌入式设备上使用python 使用python获取文件大小作为os.path.getsize()返回一个负值 我参考了这里的一个堆栈溢出,并尝试使用CFLAGS='-D_LARGEFILE64\u SOURCE-D_FILE\u OFFSET\u BITS=64'OPT=“-g-O2$CFLAGS”重新编译python 但它仍然返回负文件大小 我在linux 2.6.32上使用Python2.6.4和Django 1.2.4 有人能告诉我问题出在哪里吗 显然,Li

我在运行Linux2.6.32的嵌入式设备上使用python

使用python获取文件大小作为
os.path.getsize()
返回一个负值

我参考了这里的一个堆栈溢出,并尝试使用
CFLAGS='-D_LARGEFILE64\u SOURCE-D_FILE\u OFFSET\u BITS=64'OPT=“-g-O2$CFLAGS”重新编译python
但它仍然返回负文件大小

我在linux 2.6.32上使用Python2.6.4和Django 1.2.4


有人能告诉我问题出在哪里吗

显然,Linux发行版的Python构建有问题。与其解决实际问题,不如简单地解决它:

def getsize_workaround( filename ):
    size = os.path.getsize( filename )
    if size < 0:
        import subprocess as s
        size = long( s.Popen("ls -l %s | cut -d ' ' -f5" % filename,
                    shell=True, stdout=s.PIPE).communicate()[0] )
    return size
def getsize_变通方法(文件名):
size=os.path.getsize(文件名)
如果尺寸小于0:
将子流程作为
大小=长(s.Popen(“ls-l%s | cut-d”“-f5”%filename,
shell=True,stdout=s.PIPE)。通信()[0])
返回大小

阅读这个问题,我认为Linux内核也需要支持大文件;如果是嵌入式设备,可能无法编译以支持大文件。但是“ls-lh”显示正确的文件大小。这主意不错,但是如果文件大小在4到6GB之间呢?大概代码会得到(并返回)一个错误的正数?啊,好的观点。32位翻转可能会发生多次。更可靠的方法是抛弃条件,始终使用“ls-l”包装器。