Python 对于大文件,os.path.getsize()返回负文件大小(对于大于3GB的文件大小)
我在运行Linux2.6.32的嵌入式设备上使用python 使用python获取文件大小作为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
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”包装器。