@remeus's answer inspired me, but I don't want to use the pyftsubset.exefontTools.subset directly; I want to use the script since I can easily add something to it.
CODE
import fontTools.subset
from pathlib import Path
import os
SOURCE_FILE = Path('YOUR.ttf') # ttf, otf, ...
OUT_FORMAT = 'woff' # otf, woff, woff2, ...
TEXT_FILE = Path('YOUR.txt')
def main():
    output_file = Path('temp') / Path(SOURCE_FILE.stem + '.' + OUT_FORMAT)
    output_file.parent.mkdir(parents=True, exist_ok=True)
    args = [SOURCE_FILE,
            f"--output-file={output_file}",
            # f"--text=中英文 abcdefg",
            f"--text-file={TEXT_FILE}",  # 中英文 abcdefg
            # "--unicodes=U+0020-007E",
            f"--flavor={OUT_FORMAT}",
            #  https://github.com/fonttools/fonttools/blob/1df4f1e/Lib/fontTools/subset/__init__.py#L332-L337
            "--verbose=true", # https://github.com/fonttools/fonttools/blob/1df4f1e/Lib/fontTools/subset/__init__.py#L3015
            # "--xml=true",
            "--timing=true",
            ]
    fontTools.subset.main([str(_) for _ in args])
    os.startfile(output_file.parent)
if __name__ == "__main__":
    main()
Explain
Here are three ways to specify the subset you want
- --text: Write directly
 
- --text-file: Write the text in the file (It doesn't matter if you repeat it, the code will automatically remove it for you) (I recommend this way.)
 - example: - my.txt (utf-8) - 0123456
abcdefg
ABCDEFG
中英文
 
- --unicodes: Use unicode range
 
 If you need to convert to woff2, you will have to install brotli first, using pip install brotlicffi.
resason:
Other issue
Below is indirect issues. You can directly skip this paragraph if you don't want to see it.
Here is my experience, I want to use the font on the browser, but I get an error as below
OTS parsing error: Web font size more than 30MB
my font-size
So, If I change the format to Woff or Woff2 may solve the problem.
Still, you can use fontTools again
TTFont(Path()).save(Path())
It cost too much time when your file size is large.
package
