python os.read()无法读取正确的字节数[重复]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

我正在尝试从二进制文件(Oracle重做日志)中读取块,但是我遇到一个问题,当我尝试使用os.read(fd,512)读取512字节块时,返回的内容少于512字节(金额因区块而异)

文档指出“最多n个字节”,所以我得到的少于预期是有道理的。如何强制它保持读取状态,直到返回正确的字节数为止?

我尝试采用此处描述的方法Python f.read not reading the correct number of bytes,但仍然有问题

from os import open, close, O_RDONLY, lseek, read, write, O_BINARY, O_CREAT, O_RDWR

def get_one_block(fd, start, blocksize):
    lseek(fd, start, 0)
    blocksize = blocksize

    print('Blocksize: ' + str(blocksize))
    block = read(fd, blocksize)
    print('Actual Blocksize: ' + str(block.__sizeof__()))

    return block

def main():
    filename = "redo_logs/redo03.log"
    fd = open(filename, O_RDONLY, O_BINARY)
    b = get_one_block(fd, 512, 512)

输出

Blocksize: 512
Actual Blocksize: 502

在这种情况下,最后读取的字节是0xB3,然后是我认为是问题的0x1A。

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
EF 42 B8 5A DC D1 63 1B A3 31 C7 5E 9F 4A B7 F4 
4E 04 6B E8 B3<<-- stops here -->>1A 4F 3C BF C9 3C F6 9F C3 08 02 
05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

任何帮助将不胜感激:)

python binaryfiles
1个回答
0
投票

您需要在while循环内阅读并检查您所拥有的真实字节数。

如果数量减少,则用左增量再次阅读。

当您达到预期或达到EOF时退出。

© www.soinside.com 2019 - 2024. All rights reserved.