Язык программирования

Лекция № 9

Владимир Владимирович Руцкий rutsky.vladimir@gmail.com

_images/cgsg.png _images/pml30.png
1

План занятия

2

Interoperability с Python

3

Native code

4

Вызов нативного кода из Python

5

Возможности ctypes

Как и любой нативный код — очень хрупкая вещь

6

Соглашения о вызове функций в ctypes

7

Стандартные модули ОС

8

Передача аргументов

9

Automation в Windows

10

COM в Python

Пример замены текста в документе Word используя обёртку над COM pywin32

import win32com.client

def search_replace_all(word_file, find_str, replace_str):
    '''Заменить строку find_str на строку replace_str в word_file'''
    wdFindContinue = 1
    wdReplaceAll = 2

    # Создаём COM-объект
    app = win32com.client.DispatchEx("Word.Application")
    app.Visible = 0
    app.DisplayAlerts = 0
    app.Documents.Open(word_file)

    # expression.Execute(FindText, MatchCase, MatchWholeWord,
    #   MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, 
    #   Wrap, Format, ReplaceWith, Replace)
    app.Selection.Find.Execute(find_str, False, False, False, False, False, \
        True, wdFindContinue, False, replace_str, wdReplaceAll)
    app.ActiveDocument.Close(SaveChanges=True)
    app.Quit()

f = 'c:/path/to/my/word.doc'
search_replace_all(f, 'string_to_be_replaced', 'replacement_str')
11

Automation в OpenOffice

import socket
import uno

# soffice "-accept=socket,host=localhost,port=2002;urp;"

# Получаем контекст UNO
localContext = uno.getComponentContext()

resolver = localContext.ServiceManager.createInstanceWithContext(
				"com.sun.star.bridge.UnoUrlResolver", localContext)
# Соединяемся с OpenOffice
ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
smgr = ctx.ServiceManager
# Получаем главное окно
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)
# Получаем текущий открытый документ
model = desktop.getCurrentComponent()
# Получаем текст текущего документа
text = model.Text
# Создаём курсор
cursor = text.createTextCursor()
# Вставляем по курсору текст
text.insertString(cursor, "Hello World", 0)
12

Встраивание Python в приложения

13

Django (продолжение)

14