diff --git a/README.md b/README.md
index b556cf6..a8dcc8b 100644
--- a/README.md
+++ b/README.md
@@ -2,36 +2,41 @@
Template repository for projects on python
-* [`script.sh`](https://git.hmp.today/pavel.muhortov/template-python#script-py)
+* [`script.py`](https://git.hmp.today/pavel.muhortov/template-python#script-py)
____
+
## `script.py`
+
**Description:**
> returning current username if privileged rights are exist
> or
> returning error, if privileged rights are not exist
-
**Dependencies:**
-> - Python 3 (tested version 3.9.5)
-
+>
+> * Python 3 (tested version 3.9.5)
| PARAMETERS | DESCRIPTION | DEFAULT|
|-------------|-------------|--------|
-|**[-s,--show]**|"" - execution with pauses.
"qn" - execution without pauses.||
-|**[-c,--conf]**|path to configuration file|./script.conf|
-
+|**[-s,--show]**|"" - execution with pauses.
"qn" - execution without pauses.||
+|**[-c,--conf]**|path to configuration file|`./script.conf`|
Example usage in terminal with Python on Linux:
+
```shell
python3 ./script.py
```
+
Example usage in terminal with make the script executable on Linux:
+
```shell
chmod u+x ./script.py
script.py -s qn -c ./script.conf
```
+
Example usage in terminal with Python on Windows:
+
```shell
python .\script.py
```
diff --git a/script.conf b/script.conf
index ce25bc5..8772633 100644
--- a/script.conf
+++ b/script.conf
@@ -1 +1 @@
-logs=./script.log
\ No newline at end of file
+#log_root=/var/log
diff --git a/script.py b/script.py
index c9bfc6d..ece148c 100644
--- a/script.py
+++ b/script.py
@@ -1,71 +1,53 @@
#!/usr/bin/env python3
-from os import path, chdir
-from sys import platform
-from getpass import getuser
+import logging
from datetime import datetime
+from getpass import getuser
+from os import path, sep, chdir, devnull
+from sys import platform
-
-def addtolog(message: str) -> None:
- """
- Simple logger
- :param message: string for print to stdout and write to log
- :return: None
- """
- print(message)
- if conf['logs']:
- with open(conf['logs'], 'a') as file:
- file.write(datetime.now().strftime("%Y.%m.%d-%H:%M:%S") + " " + message + "\n")
-
-def execpause() -> None:
- """
- Simple pause
- :return: None
- """
- input("Press [ENTER] to continue...")
-
def execquite(code: int) -> None:
- """
- Exit handler
- :param code: integer to exitcode
- :return: None
+ """Exit procedure.
+
+ Args:
+ code (int): exitcode
"""
if args['show'] != 'qn':
- execpause()
- addtolog("execution time is " + str((datetime.now() - start).seconds) + " seconds, exit")
+ 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 execerror(message: str) -> None:
- """
- Error handler
- :param message: string for print to stdout and write to log
- :return: None
- """
- addtolog("error: " + message)
- execquite(1)
def getconfig(config: str) -> dict:
- """
- Simple config reader
- :param config: path to configuration file
- :return: dictionary as "key":"value"
+ """Simple config reader.
+
+ Args:
+ config (str): custom configuration file path
+
+ Returns:
+ dict: dictionary as "key":"value"
"""
dictionary = {}
- dictionary['logs'] = None
+ dictionary['log_root'] = None
if path.exists(config):
with open(config) as file:
raw = file.read()
for line in raw.splitlines():
- if "logs=" in line:
- dictionary['logs'] = line.split('=')[1].strip()
+ 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
- :return: "true" or "false"
+ """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
@@ -81,27 +63,45 @@ def checkroot() -> bool:
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)'
+ '- 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())
- if not args['conf']:
- conf = path.abspath(__file__).replace('.py', '.conf')
- else:
+
+ 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'
+ )
- start = datetime.now()
chdir(path.split(path.abspath(__file__))[0])
if checkroot():
print('Running as', getuser())
execquite(0)
else:
- execerror("Restart this as root!")
+ logging.warning(msg='Restart this as root!')
+ execquite(1)