#!/usr/bin/env python3 import logging from datetime import datetime from getpass import getuser from os import path, sep, chdir, devnull from sys import platform def execquite(code: int) -> None: """Exit procedure. Args: code (int): exitcode """ if args['show'] != 'qn': input("Press [ENTER] to continue...") global time_start time_execute = datetime.now() - time_start logging.info(msg='execution time is ' + str(time_execute) + '. Exit.') exit(code) def getconfig(config: str) -> dict: """Simple config reader. Args: config (str): custom configuration file path Returns: dict: dictionary as "key":"value" """ dictionary = {} dictionary['log_root'] = None if path.exists(config): with open(config) as file: raw = file.read() for line in raw.splitlines(): if not line.lstrip().startswith('#') and "=" in line: if "log_root=" in line: dictionary['log_root'] = line.split('=')[1].strip() return dictionary def checkroot() -> bool: """Crossplatform privileged rights checker. Returns: bool: True - if privileged rights, False - if not privileged rights """ if platform.startswith('linux') or platform.startswith('darwin'): from os import geteuid if geteuid() != 0: return False else: return True elif platform.startswith('win32'): import ctypes return ctypes.windll.shell32.IsUserAnAdmin() if __name__ == "__main__": from argparse import ArgumentParser global time_start time_start = datetime.now() args = ArgumentParser( prog='script', description='Checking privileged rights', epilog='Dependencies: ' '- Python 3 (tested version 3.9.5)' ) args.add_argument('-s', '--show', type=str, default=None, required=False, help='qn - execution without pauses') args.add_argument('-c', '--conf', type=str, default=None, required=False, help='path to configuration file') args = vars(args.parse_args()) conf = path.abspath(__file__).replace('.py', '.conf') if args['conf']: conf = args['conf'] conf = getconfig(conf) log_path = devnull if conf['log_root']: log_path = conf['log_root'] + sep + path.splitext(path.basename(__file__))[0] + '.log' logging.basicConfig( format='%(asctime)s %(levelname)s: %(message)s', datefmt='%Y-%m-%d_%H.%M.%S', handlers=[ logging.FileHandler( filename=log_path, mode='a' ), logging.StreamHandler() ], level='INFO' ) chdir(path.split(path.abspath(__file__))[0]) if checkroot(): print('Running as', getuser()) execquite(0) else: logging.warning(msg='Restart this as root!') execquite(1)