Открытие презентации Powerpoint, сохранение в формате PDF и закрытие приложения с помощью WIN32API

Python имеет модуль builtins , где хранятся «действительно глобальные» вещи - обычно только стандартные встроенные функции и типы . В Python 2 он был назван __builtin__, но работал в основном тем же самым.

Этот модуль можно импортировать так же, как и любой другой модуль, но он также волшебным образом снабжает встроенные имена для каждого другого модуля (что doesn 't скрыть их.


Если вам интересно, как это работает, builtins docs говорят:

В качестве детали реализации большинство модулей имеют имя __builtins__ доступно как часть их глобалов. Значение __builtins__ обычно является либо этим модулем, либо значением атрибута __dict__ этого модуля. Поскольку это детализация реализации, она не может использоваться альтернативными реализациями Python.

blockquote>

И exec говорит:

Если словарь globals не содержит значения для ключа __builtins__, под этим ключом вставлена ​​ссылка на словарь встроенного модуля builtins. Таким образом, вы можете контролировать, какие встроенные функции доступны для исполняемого кода, вставив ваш собственный словарь __builtins__ в глобалы, прежде чем передавать его на exec().

blockquote>

Итак, по крайней мере, в CPython, когда вы оцениваете abs, он просматривается в globals()['abs'], не найден там, а затем просматривается в globals()['__builtins__'].__dict__['abs'].

И всякий раз, когда Python (или, по крайней мере, CPython) создает новый объект модуля, его код выполняется с globals с empty __builtins__, что означает, что значение модуля по умолчанию builtins заполняется, так что это работает. И этот globals - тот, который копируется для очень функции и класса, определенных в модуле (и все, что вы делаете явно с globals без явной замены __builtins__), поэтому оно работает внутри функций и классов.

1
задан Swaroop Majipatti 18 March 2019 в 18:10
поделиться

1 ответ

Я придумал обходной путь для этого, вместо того, чтобы использовать ppSaveAsPDF, я использую его постоянное значение, равное «32», и установка для PRESENTATION и APPLICATION значения NONE фактически закрывает powerpoint. Вот обновленный код.

import win32com.client, sys

FILENAME = "C:\\Users\\Swaroop\\Desktop\\Scripts\\Test.pptx"

APPLICATION = win32com.client.Dispatch("PowerPoint.Application")

PRESENTATION = APPLICATION.Presentations.Open(FILENAME, ReadOnly= False)
PRESENTATION.SaveAs("C:\\Users\\Swaroop\\Desktop\\Output.pdf", 32)

APPLICATION.Quit()

PRESENTATION =  None
APPLICATION = None
0
ответ дан Swaroop Majipatti 18 March 2019 в 18:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: