Как избавиться от ошибки "Отказано в доступе"?

Написал код, который должен конвертировать .ui файл в .py

import os
import re


def generate_py_from_ui(path: str):
    files = os.listdir(path)
    ui_list = []
    pattern = re.compile(r'.*\.ui')
    for it in files:
        if pattern.match(it):
            ui_list.append(it)
    print(ui_list)

    for it in ui_list:
        file_path = os.path.join(path, it)
        file_name_without_extension = file_path.split(os.sep)[-1].removesuffix('.ui')
        
        cmd = f'pyside6-uic {file_path} > {path}{os.sep}{file_name_without_extension}.py'
        print('before os')
        os.system(cmd)
        print('after os')


if __name__ == '__main__':
    generate_py_from_ui(os.path.dirname((os.path.abspath(__file__))))

Судя по всему, код работает, но выдает ошибку Отказано в доступе. Какие есть варианты решения этой проблемы?

Я пробовал все основные варианты: запускал программу в разных директориях, добавлял параметр "Запуск от имени Администратора" к ярлыку python.exe. Ничто из этого ситуацию не поменяло.

Помимо этого, я добавил вот такой фрагмент в начале. import os import sys import re import win32com.shell.shell as shell ASADMIN = 'asadmin'

if sys.argv[-1] != ASADMIN:
    script = os.path.abspath(sys.argv[0])
    params = ' '.join([script] + sys.argv[1:] + [ASADMIN])
    shell.ShellExecuteEx(lpVerb='runas', lpFile=sys.executable, lpParameters=params)

Теперь при каждом запуске появляется запрос разрешения на изменение файлов, но ошибка от этого не исчезла.


Ответы (2 шт):

Автор решения: Deprom

Откройте cmd от имени администратора, так вы сможете надать доступ к папкам которые находятся ниже папки Users и запускать программу через cmd

→ Ссылка
Автор решения: eri

попробуй пути взять в двойных кавычках

    cmd = f'pyside6-uic "{file_path}" > "{path}{os.sep}{file_name_without_extension}.py"'

от os.system лучше избавиться в пользу вызова uic

from PySide6.scripts.pyside_tool import qt_tool_wrapper
qt_tool_wrapper("uic", ['-g', 'python', '-o', '{outfile}', '{infile}'] , True)
→ Ссылка