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 [, страница][, тип])