a method to handle system commands which require connectivity
            
        :param sys_command: string with shell command to run in subprocess 
        :param pipe: boolean to return a Popen object
        :param interactive: [optional] callable object that accepts (string, Popen object)
        :param print_pipe: [optional] boolean to send all pipe results to print
        :param handle_error: boolean to return error message (default: errors are raised)
        :return: Popen object or string or None

def _handle_command(self, sys_command, pipe=False, interactive=None, print_pipe=False, handle_error=False):

        '''
            a method to handle system commands which require connectivity
            
        :param sys_command: string with shell command to run in subprocess 
        :param pipe: boolean to return a Popen object
        :param interactive: [optional] callable object that accepts (string, Popen object)
        :param print_pipe: [optional] boolean to send all pipe results to print
        :param handle_error: boolean to return error message (default: errors are raised)
        :return: Popen object or string or None
        '''

        import sys
        from subprocess import Popen, PIPE, check_output, STDOUT, CalledProcessError

        try:
            if pipe:
                p = Popen(sys_command, shell=True, stdout=PIPE, stderr=PIPE)
                return p
            elif interactive:
                p = Popen(sys_command, shell=True, stdout=PIPE, stderr=STDOUT)
                exchange = ''
            # read/write to subprocess
            # https://stackoverflow.com/a/17109481/4941585
                p_output = p.stdout.readline()
                while p_output:
                    output_string = p_output.decode('utf-8')
                    exchange += output_string
                    p_input = interactive(output_string.rstrip('\n'), p)
                    if p_input:
                        p.stdin.write(str(p_input + '\n').encode())
                    p_output = p.stdout.readline()
                # for line in p.stdout:
                #     interactive(line.decode('utf-8').rstrip('\n'), p)
                #     exchange += line.decode('utf-8')
                #     sys.stdout.flush()
                # p.wait()
                return exchange
            elif print_pipe:
                p = Popen(sys_command, shell=True, stdout=PIPE, stderr=STDOUT)
                for line in p.stdout:
                    self.printer(line.decode('utf-8').rstrip('\n'))
                    sys.stdout.flush()
                p.wait()
                return None
            else:
                response = check_output(sys_command, shell=True, stderr=STDOUT).decode('utf-8')
                return response
        except CalledProcessError as err:
            try:
                import requests
                requests.get(self.uptime_ssl)
                std_err = err.output.decode('ascii', 'ignore')
                if handle_error:
                    return std_err
            except:
                from requests import Request
                request_object = Request(method='GET', url=self.uptime_ssl)
                request_details = self.handle_requests(request_object)
                self.printer('ERROR.')
                raise ConnectionError(request_details['error'])
            self.printer('ERROR.')
            raise Exception(std_err)