Я работаю с некоторым проприетарным программным обеспечением для бизнеса, написанным на DB / C, недолговечном варианте COBOL более 20 лет go без доступа к исходному коду или какой-либо полезной документации. Я пытался автоматизировать некоторые из наших процессов с помощью python и написал объект-обработчик, который может передавать команды и отправлять различные коды клавиш с помощью pyauto gui, но я достиг барьера, когда иногда мне нужно полагаться на вывод предыдущей процедуры, чтобы решить, когда / нужно ли запускать следующую. Программа GUI запускается в окне консоли, как и ncurses.
Как я могу скопировать все содержимое окна консоли в буфер обмена? Если есть способ скопировать его непосредственно в локальную переменную python, это было бы идеально; Как только у меня есть текст на экране, я могу просто сопоставить нужную часть с регулярным выражением.
Вот мой обработчик, чтобы дать вам представление:
import pyautogui
import time
import subprocess
class ECISession:
def __init__(self, username, password):
self.username = username
self.password = password
self.openECI()
self.login(username, password)
def openECI(self):
# Open ECI as a subprocess
subprocess.Popen("F:\\ECI\\hp4\\test\\s.bat")
def login(self, username, password):
# Login to ECI Session with username and password
time.sleep(15)
pyautogui.write(username, interval=0.1)
pyautogui.press('enter')
pyautogui.write(password, interval=0.1)
pyautogui.press('enter')
pyautogui.write('Y') # Make sure it ignores duplicate login
@staticmethod
def send(text='', supressEnter=False):
# Send passed text to console and press enter unless specified to supress
if text != '':
pyautogui.write(text, interval=0.1)
if supressEnter:
pass
else:
pyautogui.press('enter')
time.sleep(1)
@staticmethod
def sendF3(n=1):
# Send F3 save key 1 time by default, n times if needed
while n != 0:
pyautogui.press('F3')
n -= 1
@staticmethod
def sendF4(n=1):
# Send F4 search key 1 time by default, n times if needed
while n != 0:
pyautogui.press('F4')
n -= 1
@staticmethod
def readscreen():
# return entire console window text
pass
Readscreen () метод - вот что мне нужно выяснить. Я просто хочу вернуть содержимое консоли. Я бы просто выделил все это мышью и нажал Enter, но у меня нет возможности убедиться, что окно каждый раз запускается в одном и том же месте; Его нельзя развернуть на весь экран, иначе он испортит sh, так как ожидает отображения 80 столбцов с заданным c размером шрифта.
FYI, рассматриваемое программное обеспечение - HealthPa c от Eldorado Computing Incorporated. . Если кто-то из вас использовал это, вы знаете борьбу. Я бы выложил несколько скриншотов, но это может быть нарушение HIPPA или что-то в этом роде.