Скопируйте весь текст консоли в буфер обмена - PullRequest
1 голос
/ 29 мая 2020

Я работаю с некоторым проприетарным программным обеспечением для бизнеса, написанным на 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 или что-то в этом роде.

...