Closed icesword0760 closed 2 years ago
现在这个库fps相关功能完全无法使用,希望可以尽快解决,非常感谢
如果仅仅是解析 fps 建议 用 kperf_data 来解析 而不是 Kperf.to_dict这里应该早就做了兼容处理,最新的代码应该不会有这个问题。
还有如果可以的话在这里帮我保存个 res.selector.data 一些数据给我吗
for args in Kperf.to_dict(res.selector.data):
可以的 你的这行代码我要插在哪里(文件路径,代码行数)?需要在最新的版本上插入吗还是我当前这个版本
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 499, in _callback
for args in Kperf.to_dict(res.selector.data):
这是你的文件路径 最近版本这个问题应该解决了,但我想你帮我在一个文件里保存一下这里的二进制数据包,因为这涉及 Kperf.to_dict 解析,我想看看哪里报错了
def _callback(res):
nonlocal frame_count, last_frame, last_1_frame_cost, last_2_frame_cost, last_3_frame_cost, time_count, mach_time_factor, \
jank_count, big_jank_count, jank_time_count, _list, count_time
if type(res.selector) is InstrumentRPCParseError:
print("get InstrumentRPCParseError, data is :")
print(res.selector.data)
for args in Kperf.to_dict(res.selector.data):
_time, code = args.timestamp, args.debug_id
if code == 830472984:
if not last_frame:
last_frame = long(_time)
else:
。。。。。。。。。。。。。。。。。。。。。
C:\Users\Administrator\AppData\Local\Programs\Python\Python37\python.exe D:/PycharmProjects/toolbox/test.py 111 2022-03-04 17:03:56 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008030-00150C6E1A51402E 2022-03-04 17:03:56 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ... 2022-03-04 17:03:56 [INFO] [LockDown] lockdown.py[line:384] save path :C:\Users\Administrator.cache\pymobiledevice\00008030-00150C6E1A51402E.pem 2022-03-04 17:03:56 [INFO] [Instrument] dvt.py[line:162] set com.apple.instruments.server.services.coreprofilesessiontap callback ... get InstrumentRPCParseError, data is : b'bplist00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3,-\NSDictionaryXNSObject\xd2()/0\x10\x12DTKTraceTapMessage\xa312-\x10\x12DTKTraceTapMessage\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01`' 2022-03-04 17:03:56 [ERROR] [Instrument] dvt.py[line:247] Error in path (parsing) -> threadmap -> process stream read less than specified amount, expected 1, found 0 Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 234, in _receiver self._channel_callbacks(2 ** 32 - dtx.channel_code) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 501, in _callback for args in Kperf.to_dict(res.selector.data): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 971, in to_dict buf_io = self.check_header(kd_buf) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 966, in check_header parsed_header = kd_header_v2.parse_stream(buf_io) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 300, in parse_stream return self._parsereport(stream, context, "(parsing)") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2221, in _parse e = self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4496, in _parse return self.subcon._parsereport(io.BytesIO(data), context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 697, in _parse obj = self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4567, in _parse b = stream_read(stream, unit, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 92, in stream_read raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path) construct.core.StreamError: Error in path (parsing) -> threadmap -> process stream read less than specified amount, expected 1, found 0
你好 我更新到 Name: py-ios-device Version: 2.2.3.1 还是一样的报错
2022-03-04 17:12:14 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008030-00150C6E1A51402E
2022-03-04 17:12:14 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ...
2022-03-04 17:12:14 [INFO] [LockDown] lockdown.py[line:377] save path :C:\Users\Administrator.cache\pymobiledevice\00008030-00150C6E1A51402E.pem
2022-03-04 17:12:14 [INFO] [Instrument] dvt.py[line:162] set com.apple.instruments.server.services.coreprofilesessiontap callback ...
get InstrumentRPCParseError, data is :
b'bplist00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3,-\NSDictionaryXNSObject\xd2()/0\x10\x12DTKTraceTapMessage\xa312-\x10\x12DTKTraceTapMessage\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01`'
2022-03-04 17:12:14 [ERROR] [Instrument] dvt.py[line:247] Error in path (parsing) -> threadmap -> process
stream read less than specified amount, expected 1, found 0
Traceback (most recent call last):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 234, in _receiver
self._channel_callbacks(2 ** 32 - dtx.channel_code)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 501, in _callback
for args in Kperf.to_dict(res.selector.data):
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 969, in to_dict
buf_io = self.check_header(kd_buf)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 964, in check_header
parsed_header = kd_header_v2.parse_stream(buf_io)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 300, in parse_stream
return self._parsereport(stream, context, "(parsing)")
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse
subobj = sc._parsereport(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse
return self.subcon._parsereport(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2221, in _parse
e = self.subcon._parsereport(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse
subobj = sc._parsereport(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse
return self.subcon._parsereport(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4496, in _parse
return self.subcon._parsereport(io.BytesIO(data), context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 697, in _parse
obj = self.subcon._parsereport(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport
obj = self._parse(stream, context, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 4567, in _parse
b = stream_read(stream, unit, path)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 92, in stream_read
raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path)
construct.core.StreamError: Error in path (parsing) -> threadmap -> process
stream read less than specified amount, expected 1, found 0
Traceback (most recent call last):
File "D:/PycharmProjects/toolbox/test.py", line 20, in
你这没更新成功吧 Kperf.to_dict 应该 变成了 kperf_data 方法,你加 qq 群然后加我交流吧
我修改了源码用于打印出需要解析的字节,检测fps相关时,程序会无法正常工作,报错类型为 无法解析 修改的方法:
def check_header(self,kd_buf): print(kd_buf) if kd_buf.startswith(b'\x07X\xa2Y'): return io.BytesIO() buf_io = io.BytesIO(kd_buf) if not self.threads_pids: self.version = buf_io.read(4) print(buf_io.read()) parsed_header = kd_header_v2.parse_stream(buf_io) self.set_threads_pids(parsed_header.threadmap) return buf_io
报错日志: 2022-03-04 15:35:06 [INFO] [LockDown] lockdown.py[line:71] Connecting Device 00008030-00150C6E1A51402E 2022-03-04 15:35:06 [INFO] [Instrument] Instrument.py[line:22] InstrumentServer init ... 2022-03-04 15:35:06 [INFO] [LockDown] lockdown.py[line:384] save path :C:\Users\Administrator.cache\pymobiledevice\00008030-00150C6E1A51402E.pem 2022-03-04 15:35:06 [INFO] [Instrument] dvt.py[line:162] set com.apple.instruments.server.services.coreprofilesessiontap callback ... b'bplist00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3,-\NSDictionaryXNSObject\xd2()/0\x10\x12DTKTraceTapMessage\xa312-\x10\x12DTKTraceTapMessage\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01
PyiOSDevice().start_get_fps(fps_callback)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 146, in start_get_fps
return start_get_fps(device_id=self.device_id, rpc_channel=self.rpc_channel, callback=callback)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 548, in start_get_fps
_rpc_channel.call("com.apple.instruments.server.services.coreprofilesessiontap", "start")
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 183, in call
ret = self._call(True, channel_id, selector, *auxiliaries)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 222, in _call
ret = self.wait_reply(identifier)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 196, in wait_reply
ret = self._reply_queues[message_id].get(timeout=timeout)
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\queue.py", line 178, in get
raise Empty
_queue.Empty
' b'st00\xd4\x01\x02\x03\x04\x05\x06\x07\nX$versionY$archiverT$topX$objects\x12\x00\x01\x86\xa0_\x10\x0fNSKeyedArchiver\xd1\x08\tTroot\x80\x01\xad\x0b\x0c\x11\x1f !"#$%&\'.U$null\xd2\r\x0e\x0f\x10_\x10\x11DTTapMessagePlistV$class\x80\x02\x80\x0c\xd3\x12\x13\x0e\x14\x19\x1eWNS.keysZNS.objects\xa4\x15\x16\x17\x18\x80\x03\x80\x04\x80\x05\x80\x06\xa4\x1a\x1b\x1c\x1d\x80\x07\x80\x08\x80\t\x80\n\x80\x0bQkRccRtvRtc\x10\x00\x10\x06\x12\x00\x01\x00\x00\x10\x01\xd2()*+Z$classnameX$classes_\x10\x13NSMutableDictionary\xa3*,-\\NSDictionaryXNSObject\xd2()/0_\x10\x12DTKTraceTapMessage\xa312-_\x10\x12DTKTraceTapMessage\\DTTapMessage\x00\x08\x00\x11\x00\x1a\x00$\x00)\x002\x007\x00I\x00L\x00Q\x00S\x00a\x00g\x00l\x00\x80\x00\x87\x00\x89\x00\x8b\x00\x92\x00\x9a\x00\xa5\x00\xaa\x00\xac\x00\xae\x00\xb0\x00\xb2\x00\xb7\x00\xb9\x00\xbb\x00\xbd\x00\xbf\x00\xc1\x00\xc3\x00\xc6\x00\xc9\x00\xcc\x00\xce\x00\xd0\x00\xd5\x00\xd7\x00\xdc\x00\xe7\x00\xf0\x01\x06\x01\n\x01\x17\x01 \x01%\x01:\x01>\x01S\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x003\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01
' 2022-03-04 15:35:06 [ERROR] [Instrument] dvt.py[line:247] Error in path (parsing) -> number_of_treads stream read less than specified amount, expected 4, found 0 Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\servers\dvt.py", line 234, in _receiver self._channel_callbacks(2 ** 32 - dtx.channel_code) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\py_ios_device.py", line 499, in _callback for args in Kperf.to_dict(res.selector.data): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 971, in to_dict buf_io = self.check_header(kd_buf) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\ios_device\util\kperf_data.py", line 966, in check_header parsed_header = kd_header_v2.parse_stream(buf_io) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 300, in parse_stream return self._parsereport(stream, context, "(parsing)") File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1981, in _parse subobj = sc._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 2439, in _parse return self.subcon._parsereport(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 312, in _parsereport obj = self._parse(stream, context, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 1019, in _parse data = stream_read(stream, self.length, path) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\construct\core.py", line 92, in stream_read raise StreamError("stream read less than specified amount, expected %d, found %d" % (length, len(data)), path=path) construct.core.StreamError: Error in path (parsing) -> number_of_treads stream read less than specified amount, expected 4, found 0 Traceback (most recent call last): File "D:/PycharmProjects/toolbox/test.py", line 20, in