utils.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import argparse
  2. import functools
  3. import subprocess
  4. def read_file(fname):
  5. with open(fname, encoding='utf-8') as f:
  6. return f.read()
  7. def write_file(fname, content, mode='w'):
  8. with open(fname, mode, encoding='utf-8') as f:
  9. return f.write(content)
  10. def read_version(fname='yt_dlp/version.py'):
  11. """Get the version without importing the package"""
  12. exec(compile(read_file(fname), fname, 'exec'))
  13. return locals()['__version__']
  14. def get_filename_args(has_infile=False, default_outfile=None):
  15. parser = argparse.ArgumentParser()
  16. if has_infile:
  17. parser.add_argument('infile', help='Input file')
  18. kwargs = {'nargs': '?', 'default': default_outfile} if default_outfile else {}
  19. parser.add_argument('outfile', **kwargs, help='Output file')
  20. opts = parser.parse_args()
  21. if has_infile:
  22. return opts.infile, opts.outfile
  23. return opts.outfile
  24. def compose_functions(*functions):
  25. return lambda x: functools.reduce(lambda y, f: f(y), functions, x)
  26. def run_process(*args, **kwargs):
  27. kwargs.setdefault('text', True)
  28. kwargs.setdefault('check', True)
  29. kwargs.setdefault('capture_output', True)
  30. if kwargs['text']:
  31. kwargs.setdefault('encoding', 'utf-8')
  32. kwargs.setdefault('errors', 'replace')
  33. return subprocess.run(args, **kwargs)