mirror of
https://github.com/clearml/wexpect-venv
synced 2025-01-31 02:46:59 +00:00
[FIX] Refactored readConsole() fixes issue #10.
This commit is contained in:
parent
d85f9b3d49
commit
9ce8421316
@ -18,36 +18,46 @@ child_script = here + '\\long_printer.py'
|
||||
|
||||
def main():
|
||||
longPrinter = python_executable + ' ' + child_script
|
||||
prompt = '> '
|
||||
prompt = 'puskas> '
|
||||
|
||||
# Start the child process
|
||||
p = wexpect.spawn(longPrinter)
|
||||
# Wait for prompt
|
||||
p.expect(prompt)
|
||||
|
||||
for i in range(10):
|
||||
p.sendline('0')
|
||||
p.expect(prompt)
|
||||
if p.before.splitlines()[1] != puskas_wiki[0]:
|
||||
print(p.before.splitlines()[1])
|
||||
raise Exception()
|
||||
|
||||
p.sendline('all')
|
||||
p.expect(prompt)
|
||||
for a,b in zip(p.before.splitlines()[1:-1], puskas_wiki):
|
||||
if a!=b:
|
||||
print(p.before.splitlines()[1:-1])
|
||||
try:
|
||||
for i in range(10):
|
||||
print('.', end='')
|
||||
p.sendline('0')
|
||||
p.expect(prompt)
|
||||
if p.before.splitlines()[1] != puskas_wiki[0]:
|
||||
print(p.before.splitlines()[1])
|
||||
raise Exception()
|
||||
|
||||
for j, paragraph in enumerate(puskas_wiki):
|
||||
p.sendline(str(j))
|
||||
p.sendline('all')
|
||||
p.expect(prompt)
|
||||
if p.before.splitlines()[1] != paragraph:
|
||||
print(p.before.splitlines()[1])
|
||||
print(i)
|
||||
print(j)
|
||||
print(paragraph)
|
||||
raise Exception()
|
||||
for a,b in zip(p.before.splitlines()[1:], puskas_wiki):
|
||||
if a!=b:
|
||||
print(a)
|
||||
print(b)
|
||||
raise Exception()
|
||||
|
||||
for j, paragraph in enumerate(puskas_wiki):
|
||||
p.sendline(str(j))
|
||||
p.expect(prompt)
|
||||
if p.before.splitlines()[1] != paragraph:
|
||||
print(p.before.splitlines()[1])
|
||||
print(i)
|
||||
print(j)
|
||||
print(paragraph)
|
||||
raise Exception()
|
||||
except:
|
||||
p.interact()
|
||||
time.sleep(5)
|
||||
else:
|
||||
print('')
|
||||
print('[PASS]')
|
||||
|
||||
|
||||
main()
|
||||
|
||||
|
@ -5,53 +5,53 @@ This is is a very basic stdio handler script. This is used by python.py example.
|
||||
import time
|
||||
|
||||
puskas_wiki = ['''Ferenc Puskas was a Hungarian footballer and manager, widely regarded as one of \
|
||||
the greatest players of all time. He is the son of former footballer Ferenc Puskás Senior. A \
|
||||
the greatest players of all time. He is the son of former footballer Ferenc Puskas Senior. A \
|
||||
prolific forward, he scored 84 goals in 85 international matches for Hungary, played 4 \
|
||||
international matches for Spain and scored 514 goals in 529 matches in the Hungarian and Spanish \
|
||||
leagues. He became an Olympic champion in 1952 and led his nation to the final of the 1954 World \
|
||||
Cup where he was named the tournament's best player. He won three European Cups (1959, 1960, 1966),\
|
||||
10 national championships (5 Hungarian and 5 Spanish Primera División) and 8 top individual \
|
||||
10 national championships (5 Hungarian and 5 Spanish Primera Division) and 8 top individual \
|
||||
scoring honors. In 1995, he was recognized as the top scorer of the 20th century by the IFFHS.''',
|
||||
'''Puskás started his career in Hungary playing for Kispest and Budapest Honvéd. He was the top scorer\
|
||||
'''Puskas started his career in Hungary playing for Kispest and Budapest Honved. He was the top scorer\
|
||||
in the Hungarian League on four occasions, and in 1948, he was the top goal scorer in Europe. \
|
||||
During the 1950s, he was both a prominent member and captain of the Hungarian national team, known\
|
||||
as the Mighty Magyars. In 1958, two years after the Hungarian Revolution, he emigrated to Spain \
|
||||
where he played for Real Madrid. While playing with Real Madrid, Puskás won four Pichichis and \
|
||||
where he played for Real Madrid. While playing with Real Madrid, Puskas won four Pichichis and \
|
||||
scored seven goals in two European Champions Cup finals.''',
|
||||
'''After retiring as a player, he became a coach. The highlight of his coaching career came in 1971 \
|
||||
when he guided Panathinaikos to the European Cup final, where they lost 2–0 to AFC Ajax. In 1993, \
|
||||
when he guided Panathinaikos to the European Cup final, where they lost 2-0 to AFC Ajax. In 1993, \
|
||||
he returned to Hungary and took temporary charge of the Hungarian national team. In 1998, he \
|
||||
became one of the first ever FIFA/SOS Charity ambassadors. In 2002, the Népstadion in Budapest \
|
||||
was renamed the Puskás Ferenc Stadion in his honor. He was also declared the best Hungarian \
|
||||
became one of the first ever FIFA/SOS Charity ambassadors. In 2002, the Nepstadion in Budapest \
|
||||
was renamed the Puskas Ferenc Stadion in his honor. He was also declared the best Hungarian \
|
||||
player of the last 50 years by the Hungarian Football Federation in the UEFA Jubilee Awards in \
|
||||
November 2003. In October 2009, FIFA announced the introduction of the FIFA Puskás Award, \
|
||||
November 2003. In October 2009, FIFA announced the introduction of the FIFA Puskas Award, \
|
||||
awarded to the player who has scored the "most beautiful goal" over the past year. He was also \
|
||||
listed in Pelé's FIFA 100.''',
|
||||
listed in Pele's FIFA 100.''',
|
||||
'''Ferenc Purczeld was born on 2 April 1927 to a German (Danube Swabian) family in Budapest and \
|
||||
brought up in Kispest, then a suburb, today part of the city. His mother, Margit Biró \
|
||||
(1904–1976), was a seamstress. He began his career as a junior with Kispest AC,[10] where his \
|
||||
brought up in Kispest, then a suburb, today part of the city. His mother, Margit Biro \
|
||||
(1904-1976), was a seamstress. He began his career as a junior with Kispest AC,[10] where his \
|
||||
father, who had previously played for the club, was a coach. He had grandchildren, who were the \
|
||||
children of his brothers son[clarification needed]; the two sons of his brother are Zoltan and \
|
||||
Istvan, the first one have 3 children; Ilonka, Camila and Andrés, and the second one have two.''',
|
||||
'''He changed his name to Puskás. He initially used the pseudonym "Miklós Kovács" to help \
|
||||
Istvan, the first one have 3 children; Ilonka, Camila and Andres, and the second one have two.''',
|
||||
'''He changed his name to Puskas. He initially used the pseudonym "Miklos Kovacs" to help \
|
||||
circumvent the minimum age rules[12] before officially signing at the age of 12. Among his early \
|
||||
teammates was his childhood friend and future international teammate József Bozsik. He made his \
|
||||
first senior appearance for Kispest in November 1943 in a match against Nagyváradi AC.[13] It was \
|
||||
here where he got the nickname "Öcsi" or "Buddy".[14]''',
|
||||
teammates was his childhood friend and future international teammate Jozsef Bozsik. He made his \
|
||||
first senior appearance for Kispest in November 1943 in a match against Nagyvaradi AC.[13] It was \
|
||||
here where he got the nickname "Ocsi" or "Buddy".[14]''',
|
||||
'''Kispest was taken over by the Hungarian Ministry of Defence in 1949, becoming the Hungarian Army \
|
||||
team and changing its name to Budapest Honvéd. As a result, football players were given military \
|
||||
ranks. Puskás eventually became a major (Hungarian: Őrnagy), which led to the nickname "The \
|
||||
Galloping Major".[15] As the army club, Honvéd used conscription to acquire the best Hungarian \
|
||||
players, leading to the recruitment of Zoltán Czibor and Sándor Kocsis.[16] During his career at \
|
||||
Budapest Honvéd, Puskás helped the club win five Hungarian League titles. He also finished as top \
|
||||
goal scorer in the league in 1947–48, 1949–50, 1950 and 1953, scoring 50, 31, 25 and 27 goals, \
|
||||
team and changing its name to Budapest Honved. As a result, football players were given military \
|
||||
ranks. Puskas eventually became a major (Hungarian: Ornagy), which led to the nickname "The \
|
||||
Galloping Major".[15] As the army club, Honved used conscription to acquire the best Hungarian \
|
||||
players, leading to the recruitment of Zoltan Czibor and Sandor Kocsis.[16] During his career at \
|
||||
Budapest Honved, Puskas helped the club win five Hungarian League titles. He also finished as top \
|
||||
goal scorer in the league in 1947-48, 1949-50, 1950 and 1953, scoring 50, 31, 25 and 27 goals, \
|
||||
respectively. In 1948, he was the top goal scorer in Europe.[17]''' ]
|
||||
|
||||
def main():
|
||||
print('Welcome!')
|
||||
|
||||
while True:
|
||||
print('> ', end='')
|
||||
print('puskas> ', end='')
|
||||
num = input()
|
||||
|
||||
if num == 'exit':
|
||||
|
59
wexpect.py
59
wexpect.py
@ -130,8 +130,8 @@ if 'dev' in __version__ :
|
||||
logger.setLevel(logging.DEBUG)
|
||||
else:
|
||||
logger.setLevel(logging.INFO)
|
||||
fh = logging.FileHandler('wexpect.log')
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
fh = logging.FileHandler('wexpect.log', 'w', 'utf-8')
|
||||
formatter = logging.Formatter('%(asctime)s - %(filename)s::%(funcName)s - %(levelname)s - %(message)s')
|
||||
fh.setFormatter(formatter)
|
||||
logger.addHandler(fh)
|
||||
|
||||
@ -2142,57 +2142,49 @@ class Wtty:
|
||||
self.switchBack()
|
||||
return wrote
|
||||
|
||||
def getPoint(self, offset):
|
||||
def getCoord(self, offset):
|
||||
"""Converts an offset to a point represented as a tuple."""
|
||||
|
||||
x = offset % self.__consSize[0]
|
||||
y = offset // self.__consSize[0]
|
||||
return (x, y)
|
||||
return win32console.PyCOORDType(x, y)
|
||||
|
||||
def getOffset(self, x, y):
|
||||
def getOffset(self, coord):
|
||||
"""Converts a tuple-point to an offset."""
|
||||
|
||||
return x + y * self.__consSize[0]
|
||||
return coord.X + coord.Y * self.__consSize[0]
|
||||
|
||||
def readConsole(self, startCo, endCo):
|
||||
"""Reads the console area from startCo to endCo and returns it
|
||||
as a string."""
|
||||
logger.info("STARTED")
|
||||
|
||||
buff = []
|
||||
self.lastRead = 0
|
||||
|
||||
startX = startCo.X
|
||||
startY = startCo.Y
|
||||
endX = endCo.X
|
||||
endY = endCo.Y
|
||||
|
||||
while True:
|
||||
startOff = self.getOffset(startX, startY)
|
||||
logger.info("startOff %s" % startOff)
|
||||
endOff = self.getOffset(endX, endY)
|
||||
logger.info("endOff %s" % endOff)
|
||||
startOff = self.getOffset(startCo)
|
||||
endOff = self.getOffset(endCo)
|
||||
readlen = endOff - startOff
|
||||
logger.info("readlen %s" % readlen)
|
||||
|
||||
|
||||
if readlen <= 0:
|
||||
break
|
||||
|
||||
logger.info("startOff: %d endOff: %d readlen: %d", startOff, endOff, readlen)
|
||||
|
||||
if readlen > 4000:
|
||||
readlen = 4000
|
||||
endPoint = self.getPoint(startOff + 4000)
|
||||
logger.info("endPoint {}".format(endPoint))
|
||||
else:
|
||||
endPoint = self.getPoint(endOff)
|
||||
logger.info("endPoint {}".format(endPoint))
|
||||
endPoint = self.getCoord(startOff + readlen)
|
||||
logger.info("endPoint {}".format(endPoint))
|
||||
|
||||
s = self.__consout.ReadConsoleOutputCharacter(readlen, startCo)
|
||||
ln = len(s)
|
||||
self.lastRead += ln
|
||||
self.totalRead += ln
|
||||
logger.info("len {}".format(len(s)))
|
||||
self.lastRead += len(s)
|
||||
self.totalRead += len(s)
|
||||
buff.append(s)
|
||||
|
||||
startX, startY = endPoint[0], endPoint[1]
|
||||
logger.info("startX %s startY %s" % (startX, startY))
|
||||
logger.info("endX %s endY %s" % (endX, endY))
|
||||
if readlen <= 0 or (startX >= endX and startY >= endY):
|
||||
break
|
||||
logger.info(s.replace(screenbufferfillchar, '*'))
|
||||
|
||||
startCo = endPoint
|
||||
|
||||
return ''.join(buff)
|
||||
|
||||
@ -2204,7 +2196,7 @@ class Wtty:
|
||||
strlist = []
|
||||
for i, c in enumerate(s):
|
||||
if c == screenbufferfillchar:
|
||||
if (self.totalRead - self.lastRead + i + 1) % 80 == 0:
|
||||
if (self.totalRead - self.lastRead + i + 1) % self.__consSize[0] == 0:
|
||||
strlist.append('\r\n')
|
||||
else:
|
||||
strlist.append(c)
|
||||
@ -2249,6 +2241,7 @@ class Wtty:
|
||||
raw = raw[self.__consSize[0]:]
|
||||
raw = ''.join(rawlist)
|
||||
s = self.parseData(raw)
|
||||
logger.info(s)
|
||||
for i, line in enumerate(reversed(rawlist)):
|
||||
if line.endswith(screenbufferfillchar):
|
||||
# Record the Y offset where the most recent line break was detected
|
||||
@ -2268,7 +2261,7 @@ class Wtty:
|
||||
|
||||
if s:
|
||||
lastReadData = self.lastReadData
|
||||
pos = self.getOffset(self.__currentReadCo.X, self.__currentReadCo.Y)
|
||||
pos = self.getOffset(self.__currentReadCo)
|
||||
self.lastReadData = s
|
||||
if isSameY or not lastReadData.endswith('\r\n'):
|
||||
# Detect changed lines
|
||||
|
Loading…
Reference in New Issue
Block a user