worthless-launcher/worthless/linux.py

41 lines
1.4 KiB
Python

import asyncio
from pathlib import Path
from aiopath import AsyncPath
class LinuxUtils:
"""Utilities for Linux-specific tasks.
"""
def __init__(self):
pass
@staticmethod
async def _exec_command(args):
"""Execute a command using pkexec (friendly gui)
"""
if not await AsyncPath("/usr/bin/pkexec").exists():
raise FileNotFoundError("pkexec not found.")
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 | AsyncPath):
"""Write text to a file using pkexec (friendly gui)
"""
if isinstance(file_path, Path | AsyncPath):
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 | AsyncPath):
"""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))