Python: приостановить цикл пока приложение закрывается
У меня есть сценарий, с которым я бы хотел массово редактировать файлы PowerPoint. Если я отредактирую файлы один за другим, это прекрасно работает. Если я их массово редактирую, это не удастся. Я предполагаю, что это потому, что приложение не закрывается до того, как загрузится следующий файл, но я могу, и, скорее всего, ошибаюсь.
Код:
import win32com.client, sys, glob
folder = (glob.glob('*.ppt'))
print("="*20)
print(folder)
print("="*20)
if folder:
for files in folder:
print("Current File: " + files)
try:
Application = win32com.client.Dispatch("PowerPoint.Application")
Application.Visible = True
Presentation = Application.Presentations.Open("c:/pptpy/testfolder/" + files)
for Slide in Presentation.Slides:
for Shape in Slide.Shapes:
try:
Shape.TextFrame.TextRange.Font.Name = "Arial"
Shape.TextFrame.TextRange.Font.Size = "14"
Shape.TextFrame.TextRange.Font.Color.RGB = "000000"
except:
pass
Presentation.Save()
Application.Quit()
#Adding a time.sleep(1) here pauses the Application.Quit()
except:
print("Error in: " + files)
pass
Ошибка (когда не пропускаются исключения):
Traceback (most recent call last):
File "C:\pptpy\testfolder\convert.py", line 19, in <module>
for Shape in Slide.Shapes:
File "C:\Python33\lib\site-packages\win32com\client\dynamic.py", line 247, in __getitem__
return self._get_good_object_(self._enum_.__getitem__(index))
File "C:\Python33\lib\site-packages\win32com\client\util.py", line 37, in __getitem__
return self.__GetIndex(index)
File "C:\Python33\lib\site-packages\win32com\client\util.py", line 53, in __GetIndex
result = self._oleobj_.Next(1)
pywintypes.com_error: (-2147023174, 'The RPC server is unavailable.', None, None)
Подробности:
Python3.3
Powerpoint2007
Если вам нужны какие-либо подробности, я был бы рад предоставить их! Спасибо!
1 ответ
Решение
Попробуйте что-то вроде этого (опираясь на предыдущий вопрос). Вы должны действительно потратить время на разработку своего кода, прежде чем задавать такие вопросы:
import win32com.client
import sys # <- obsolete not used
import os
import glob # style guide one import per line
Application = win32com.client.Dispatch("PowerPoint.Application")
Application.Visible = True
ppt_files = glob.glob('*.ppt')
for file in ppt_files:
file = os.path.abspath(file)
Presentation = Application.Presentations.Open(file)
for Slide in Presentation.Slides:
for Shape in Slide.Shapes:
try:
Shape.TextFrame.TextRange.Font.Name = "Arial"
Shape.TextFrame.TextRange.Font.Size = "12"
Shape.TextFrame.TextRange.Font.Color.RGB = "000000"
except:
pass
Presentation.Save()
Presentation.Close()
Application.Quit()