TypeError: объект 'str' не вызывается при взаимодействии win32com с Attachmate

Я использую Python, чтобы попытаться автоматизировать Attachmate - EXTRA!, аналогично тому, как это делают большинство в VBA.

Я использую пакет pywin32, найденный здесь. Я использую документацию о том, как OLE работает с Attachmate (где можно найти методы GetString и PutString) здесь.

Мой код:

system = win32com.client.Dispatch("EXTRA.System")
sess0 = system.ActiveSession

product = sess0.screen.GetString(0, 1, 2)

Выдает ошибку:

line13: product = sess0.screen.GetString(1, 1, 2)
TypeError: 'str' object is not callable

Говорят, что метод GetString имеет синтаксис: rc = object.GetString (Row, Col, Length, [Page]), но моя приведенная выше попытка этого синтаксиса в Python приводит к ошибке выше.

Я исследовал эту ошибку и обнаружил, что это эквивалентно попытке сделать: "mystring"(). Этого не должно быть, потому что когда я проверяю тип моей sess0, это действительно: <class 'win32com.client.CDispatch'>,

Я знаю, что эта проблема может быть вызвана тем, что синтаксис отличается от того, что объясняется на странице Attachmate/OLE. Однако метод PutString объясняется следующим синтаксисом: object.PutString String [,Row][,Col][,Page], но у меня это работает нормально, используя: sess0.screen.PutString("90", 1, 79), Этот код правильно помещает строку "90" в местоположение 1, 79 в моем сеансе Attachmate.

Мне любопытно, может быть, это проблема самого пакета. Если у кого-то есть опыт автоматизации Attachmate с Python, его помощь будет принята с благодарностью!

1 ответ

Решение

Я использую эти функции для чтения и записи на Attachmate EXTRA! экран

Попробуйте следующее:

import win32com.client

def write(screen,row,col,text):
    screen.row = row
    screen.col = col
    screen.SendKeys(text)


def read(screen,row,col,length,page=None):
    if page is None:
        return screen.Area(row, col, row, col+length).value
    else:
        return screen.Area(row, col, row, col+length, page).value


def test():
    system = win32com.client.Dispatch("EXTRA.System")
    sess0 = system.ActiveSession
    screen = sess0.Screen

    product = read(screen, 1, 1, 2)
    print(product)
    write(screen, 1, 79, "90")

Документация:

Screen.Area (StartRow, StartCol, EndRow, EndCol [, страница][, тип])

SendKeys (String)

Другие вопросы по тегам