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

Я хочу создать короткий скрипт, который перебирает все файлы .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.

Iпробовал:

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: / Program во вновь открывшемся окне 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

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

...