Найти предыдущий символ в консоли в python - PullRequest
0 голосов
/ 03 августа 2020

Есть ли способ найти предыдущий символ (символы) в консоли в python?

print('Hello', end='')

должен вернуть 'o'.

Если есть способ сделать это, как я могу получить предыдущие символы x? например, 'lo', если мне нужно 2 символа. Также должно работать для трассировки.

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Возможно, вам нужно что-то похожее на то, что делает Expect.

Проверьте этот код:

import pty
import os

my_list_accumulator = []

def read_stuff(fd):
    output = os.read(fd, 1024)
    my_list_accumulator.append(output)
    return output

pty.spawn('python3', read_stuff)

Демо:

>>> import pty
>>> import os
>>> 
>>> my_list_accumulator = []
>>> 
>>> def read_stuff(fd):
...     output = os.read(fd, 1024)
...     my_list_accumulator.append(output)
...     return output
...     
... 
>>> pty.spawn('python3', read_stuff)
Python 3.5.2 (default, Jul 17 2020, 14:04:10) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello', end='')
Hello>>> And this will give error
  File "<stdin>", line 1
    And this will give error
           ^
SyntaxError: invalid syntax
>>> 
0
>>> # pressed Ctrl-D to escape
... 
>>> print(b''.join(my_list_accumulator).decode('utf-8'))
Python 3.5.2 (default, Jul 17 2020, 14:04:10) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello', end='')
Hello>>> And this will give error
  File "<stdin>", line 1
    And this will give error
           ^
SyntaxError: invalid syntax
>>> 

>>> 

Итак, вы можете изменить read_stuff, чтобы делать то, что вы sh, но обязательно прочтите документацию: https://docs.python.org/3/library/pty.html

0 голосов
/ 03 августа 2020

Пробовали ли вы использовать subprocess и PIPE для вывода выполняемого вами скрипта. Пример: вы хотите получить вывод консоли из:

#script1.py
print('Hello',end='')

Создание подпроцесса позволит вам запустить и получить STDOUT & STDERR

#subproc.py
from subprocess import Popen, PIPE
process = Popen(['python','script1.py'],stdout=PIPE,stderr=PIPE,shell=True)
stdout,stderr = process.communicate()
print(stdout.decode('utf-8')) #console output
print(stderr.decode('utf-8')) #traceback, empty if there's no error

#From there you can manipulate string
print(stdout.decode('utf-8')[-1:]) #will print string 'o'
...