37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
import asyncio
|
|
from pathlib import Path
|
|
|
|
|
|
class LinuxUtils:
|
|
"""Utilities for Linux-specific tasks.
|
|
"""
|
|
def __init__(self):
|
|
pass
|
|
|
|
async def _exec_command(self, args):
|
|
"""Execute a command using pkexec (friendly gui)
|
|
"""
|
|
rsp = await asyncio.create_subprocess_shell(args)
|
|
await rsp.wait()
|
|
match rsp.returncode:
|
|
case 127:
|
|
raise OSError("Authentication failed.")
|
|
case 128:
|
|
raise RuntimeError("User cancelled the authentication.")
|
|
|
|
return rsp
|
|
|
|
async def write_text_to_file(self, text, file_path: str | Path):
|
|
"""Write text to a file using pkexec (friendly gui)
|
|
"""
|
|
if isinstance(file_path, Path):
|
|
file_path = str(file_path)
|
|
await self._exec_command('echo -e "{}" | pkexec tee {}'.format(text, file_path))
|
|
|
|
async def append_text_to_file(self, text, file_path: str | Path):
|
|
"""Append text to a file using pkexec (friendly gui)
|
|
"""
|
|
if isinstance(file_path, Path):
|
|
file_path = str(file_path)
|
|
await self._exec_command('echo -e "{}" | pkexec tee -a {}'.format(text, file_path))
|