code: def do(self, output, input_list):
      input_file_path = None
      try:
          if self.opts.is_msvc_compatible_linker:
              # use response file for input (because of Windows cmdline length limitations)
  
              # can't use NamedTemporaryFile because of permissions issues on Windows
              input_file_fd, input_file_path = tempfile.mkstemp()
              try:
                  input_file = os.fdopen(input_file_fd, "w")
                  for input in input_list:
                      if " " in input:
                          input_file.write('"{}" '.format(input))
                      else:
                          input_file.write("{} ".format(input))
                  input_file.flush()
              finally:
                  os.close(input_file_fd)
              input_args = ["@" + input_file_path]
          else:
              input_args = input_list
  
          cmd = (
              self.archiving_cmd_prefix
              + [output]
              + self.opts.preserved_options
              + input_args
          )
          subprocess.check_call(cmd)
      finally:
          if input_file_path is not None:
              os.remove(input_file_path)
  
      if not self.opts.is_msvc_compatible_linker:
          subprocess.check_call(
              [self.opts.parsed_args.cmake_ranlib, output]
          )
  
file_path: catboost/build/scripts/create_recursive_library_for_cmake.py
imports: import argparse
  import os
  import shlex
  import subprocess
  import sys
  import tempfile
label_desc: Use image node_id 2 for calling the FilesCombiner obj's underlying member method code with example usage: obj.do(output, input_list) without return types