#!/usr/bin/env python## Takes a directory of files and zips them up (as uncompressed files).# This then gets converted into a C data structure which can be read# like a filesystem at runtime.## This is somewhat like frozen modules in python, but allows arbitrary files# to be used.from __future__ import print_functionimport argparseimport osimport subprocessimport sysimport typesdef create_zip(zip_filename, zip_dir):abs_zip_filename = os.path.abspath(zip_filename)save_cwd = os.getcwd()os.chdir(zip_dir)if os.path.exists(abs_zip_filename):os.remove(abs_zip_filename)subprocess.check_call(['zip', '-0', '-r', '-D', abs_zip_filename, '.'])os.chdir(save_cwd)def create_c_from_file(c_filename, zip_filename):with open(zip_filename, 'rb') as zip_file:with open(c_filename, 'wb') as c_file:print('#include <stdint.h>', file=c_file)print('', file=c_file)print('const uint8_t memzip_data[] = {', file=c_file)while True:buf = zip_file.read(16)if not buf:breakprint(' ', end='', file=c_file)for byte in buf:if type(byte) is types.StringType:print(' 0x{:02x},'.format(ord(byte)), end='', file=c_file)else:print(' 0x{:02x},'.format(byte), end='', file=c_file)print('', file=c_file)print('};', file=c_file)def main():parser = argparse.ArgumentParser(prog='make-memzip.py',usage='%(prog)s [options] [command]',description='Generates a C source memzip file.')parser.add_argument('-z', '--zip-file',dest='zip_filename',help='Specifies the name of the created zip file.',default='memzip_files.zip')parser.add_argument('-c', '--c-file',dest='c_filename',help='Specifies the name of the created C source file.',default='memzip_files.c')parser.add_argument(dest='source_dir',default='memzip_files')args = parser.parse_args(sys.argv[1:])print('args.zip_filename =', args.zip_filename)print('args.c_filename =', args.c_filename)print('args.source_dir =', args.source_dir)create_zip(args.zip_filename, args.source_dir)create_c_from_file(args.c_filename, args.zip_filename)if __name__ == "__main__":main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。