#!/usr/bin/env python3

import os
import sys
import time
import logging
import argparse

name = os.path.basename(__file__)
logging.basicConfig(format="%(asctime)s %(levelname)s %(message)s",level=logging.INFO)

def parser_cmd_args() -> argparse.ArgumentParser:
    """
    处理命令行参数
    """
    parser = argparse.ArgumentParser(name)
    parser.add_argument('--chunk',type=int,default=4,help="chunk size default 4 (MB)")
    parser.add_argument('--sleep-time',type=int,default=1,help="sleep time per truncate")
    parser.add_argument('file',type=str,default='/tmp/big.log',help='file path')
    args = parser.parse_args()
    return args



def truncate_file(args:argparse.ArgumentParser):
    """
    分批次截断数据文件
    """
    if not os.path.isfile(args.file):
        # file not exists
        logging.error(f"file {args.file} not exists or permission denied .")
        sys.exit(1)
    
    # 取得文件的字节大小
    size = os.stat(args.file).st_size
    # 计算 chunk 的大小
    chunk = int(args.chunk) * 1024 * 1024
    logging.info(f"file {args.file} size {size}(byte)    chunck size {chunk}(byte)")

    try:
        while True:
            target_size = size - chunk if size > chunk else 0
            os.truncate(args.file,target_size)
            logging.info(f"truncate file to {target_size} byte(s)")
            if target_size == 0:
                break
            time.sleep(args.sleep_time)
            size = os.stat(args.file).st_size
    except Exception as err:
        logging.error(str(err))
        sys.exit(1)
    
    logging.info("compelete")


def main():
    args = parser_cmd_args()
    truncate_file(args)


if __name__ == "__main__":
    main()





