Вызов 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.')