Вызов pyuic4 в цикле for для генерации всех py-файлов | Вызов.bat из питона

Я хочу создать короткий скрипт, который перебирает все файлы.ui и.qrc в папке и вызывает pyuic4 и pyrcc4 соответственно для каждого файла, генерируя соответствующие файлы.py.

Для файлов.qrc работает следующее, потому что pyrcc4 - это файл.exe, который можно вызывать с помощью subprocess.Popen

for qrcFile in glob.glob("*.qrc"):
    pyFile = qrcFile[:-4] + '.py'
    print('Generating ' + str(pyFile) + ' from ' + str(qrcFile))
    # pyrcc4 input.qrc -o output.py
    params = [r"pyrcc4", str(qrcFile), "-o", str(pyFile)]
    subprocess.Popen(params)

но для файлов.ui это не работает, потому что pyuic4 - это файл.bat.

Я пытался:

1:

for file in glob.glob("*.ui"):
    filename = file[:-3] + '.py'
    print('Generating ' + str(filename) + ' from ' + str(file))
    # pyuic4 input.ui -o output.py
    command = 'pyuic4.bat ' + str(file) + '-o' + str(filename)
    os.system(str(command))

но я получаю:

Generating aboutGUI.py from aboutGUI.ui
'C:/Program' is not recognized as an internal or external command,

2: то же, что 1, но я заменил os.system(str(команда)) на subprocess.call(str(команда)). Тот же результат.

3:

batFileName = "ui_generator.bat"
f = open(batFileName, "w+")
f.write("@echo off\n")
filestring = ''
for uiFile in glob.glob("*.ui"):
    pyFile = uiFile[:-3] + '.py'
    print('Adding: ' + str(pyFile) + ' from ' + str(uiFile))
    filestring = filestring + "pyuic4 " + str(uiFile) + " -o " + str(pyFile) + " && "

f.write(filestring[:-4])
f.close()

subprocess.call(batFileName)

тот же "C:/Program" не распознается... ошибка

Это я действительно не понимаю. Потому что, если я вручную запускаю сгенерированный BAT-файл, он делает то, что должен, но если я вызываю его из python, он отображает ошибку. И если я заменю subprocess.call(batFileName) на os.system(batFileName) или os.system('start cmd /k ' + str(batfilename)), то это только перемещает ошибку программы C: / в только что открытое окно cmd.

Как я могу решить это?

Я серьезно обдумал

os.rename('C:\Program Files','C:\ProgramFiles')
os.system('start cmd /k set PATH=%PATH%;C:\ProgramFiles\Anaconda3\python.exe')

ПРИМЕЧАНИЕ: pyuic4 вызывается из

C:\Program Files\Anaconda3\Library\bin\pyuic4.bat

РЕДАКТИРОВАТЬ: Я попробовал большинство вещей отсюда, но это не работает. Та же ошибка.

1 ответ

Решение
      from pathlib import Path
import os

# generate something like this and the run it
# @echo off
# pyrcc5 pixels.qrc -o pixels_rc.py && pyuic5 window.ui -o window.py && pyuic5 dialog.ui -o dialog.py

command = f'pyrcc.exe Design/pixels.qrc -o GeneratedFiles/pixels_rc.py'

for file in os.listdir(Path(os.getcwd()+'/Design')):
    if file.endswith('ui'):
        filename = file.split('.')[0]
        command = command + f" && pyrcc.exe Design/{filename}.ui -o GeneratedFiles/{filename}.py"

try:
    result = os.system(command)
    if result == 0:
        pass
except Exception as e:
    print('Error {e}')

print('\n Done.')
Другие вопросы по тегам