在for循环中调用pyuic4以生成所有py文件|从python调用.bat

2024-06-16 17:48:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个短脚本,在文件夹中的所有.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相同,但我用子进程调用(str(command))替换了os.system(str(command))。同样的结果

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调用它,它会显示错误。如果我用os.system(batFileName)os.system('start cmd/k'+str(batFileName))替换子进程调用(batFileName),它只会在新打开的cmd窗口中移动C:/Program错误

我怎样才能解决这个问题

我认真考虑过

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

编辑:我尝试了here的大部分内容,但都不起作用。同样的错误


Tags: 文件pyuiosprogramsystemglobcommand