Python win32com.client.Dispatch с циклическим просмотром документов Word и экспортом в PDF; не удается, когда происходит следующий цикл

На основе сценария здесь:.doc в pdf используя python I 'у нас есть полуработающий скрипт для экспорта файлов .docx в pdf из C: \ Export_to_pdf в новую папку.

Проблема в том, что он проходит через первую пару документов, а затем терпит неудачу с:

(-2147352567, 'Exception occurred.', (0, u'Microsoft Word', u'Command failed', u'wdmain11.chm', 36966, -2146824090), None)

Это, по-видимому, бесполезное общее сообщение об ошибке. Если я медленно отлаживаю его с помощью pdb, я могу перебрать все файлы и успешно экспортировать. Если я также буду следить за процессами в диспетчере задач Windows, то увижу, что WINWORD запускается, а затем заканчивается, когда он должен, но для больших файлов требуется больше времени для стабилизации использования памяти. Это заставляет меня думать, что скрипт отключается, когда WINWORD не 'У него нет времени для инициализации или выхода до вызова следующего метода для объекта client.Dispatch.

Есть ли способ с win32com или comtypes, чтобы определить и дождаться начала или завершения процесса?

Мой сценарий:

import os
from win32com import client

folder = "C:\\Export_to_pdf"
file_type = 'docx'
out_folder = folder + "\\PDF"

os.chdir(folder)

if not os.path.exists(out_folder):
    print 'Creating output folder...'
    os.makedirs(out_folder)
    print out_folder, 'created.'
else:
    print out_folder, 'already exists.\n'

for files in os.listdir("."):
    if files.endswith(".docx"):
        print files

print '\n\n'

try:
    for files in os.listdir("."):
        if files.endswith(".docx"):
            out_name = files.replace(file_type, r"pdf")
            in_file = os.path.abspath(folder + "\\" + files)
            out_file = os.path.abspath(out_folder + "\\" + out_name)
            word = client.Dispatch("Word.Application")
            doc = word.Documents.Open(in_file)
            print 'Exporting', out_file
            doc.SaveAs(out_file, FileFormat=17)
            doc.Close()
            word.Quit()
except Exception, e:
    print e

Рабочий код - просто заменил блок try на этот. Примечание переместил оператор DispatchEx за пределы цикла for и word.Quit () в оператор finally, чтобы обеспечить его закрытие.

try:
    word = client.DispatchEx("Word.Application")
    for files in os.listdir("."):
        if files.endswith(".docx") or files.endswith('doc'):
            out_name = files.replace(file_type, r"pdf")
            in_file = os.path.abspath(folder + "\\" + files)
            out_file = os.path.abspath(out_folder + "\\" + out_name)
            doc = word.Documents.Open(in_file)
            print 'Exporting', out_file
            doc.SaveAs(out_file, FileFormat=17)
            doc.Close()
except Exception, e:
    print e
finally:
    word.Quit()

Ответы на вопрос(1)

Ваш ответ на вопрос