utils.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # Adopted from https://github.com/yt-dlp/yt-dlp/tree/master/devscripts
  2. import argparse
  3. import functools
  4. import subprocess
  5. def read_file(fname):
  6. with open(fname, encoding='utf-8') as f:
  7. return f.read()
  8. def write_file(fname, content, mode='w'):
  9. with open(fname, mode, encoding='utf-8') as f:
  10. return f.write(content)
  11. def get_filename_args(has_infile=False, default_outfile=None):
  12. parser = argparse.ArgumentParser()
  13. if has_infile:
  14. parser.add_argument('infile', help='Input file')
  15. kwargs = {'nargs': '?', 'default': default_outfile} if default_outfile else {}
  16. parser.add_argument('outfile', **kwargs, help='Output file')
  17. opts = parser.parse_args()
  18. if has_infile:
  19. return opts.infile, opts.outfile
  20. return opts.outfile
  21. def compose_functions(*functions):
  22. return lambda x: functools.reduce(lambda y, f: f(y), functions, x)
  23. def run_process(*args, **kwargs):
  24. kwargs.setdefault('text', True)
  25. kwargs.setdefault('check', True)
  26. kwargs.setdefault('capture_output', True)
  27. if kwargs['text']:
  28. kwargs.setdefault('encoding', 'utf-8')
  29. kwargs.setdefault('errors', 'replace')
  30. return subprocess.run(args, **kwargs)