Если вы понимаете, что делать что-то подобное следует делать то, что вы хотите:
import random
from pynput.keyboard import Key, Controller
keyboard = Controller()
def press_release_char(char):
keyboard.press(char)
keyboard.release(char)
press_release_char(str(random.randint(0,9)))
press_release_char(Key.enter)
На основании документации pynput https://pynput.readthedocs.io/en/latest/keyboard .html # control-the-keyboard
Вы можете добавить цикл вокруг строки press_release_char(str(random.randint(0,9)))
для нескольких цифр
Как Charles уже упомянул, проблема буферизует. Я работал в к подобной проблеме при записи некоторых модулей для SNMPd и решил его путем замены stdout с версией автосбрасывания.
я использовал следующий код, вдохновленный некоторыми сообщениями на ActiveState:
class FlushFile(object):
"""Write-only flushing wrapper for file-type objects."""
def __init__(self, f):
self.f = f
def write(self, x):
self.f.write(x)
self.f.flush()
# Replace stdout with an automatically flushing version
sys.stdout = FlushFile(sys.__stdout__)
Вывод процесса буферизуется. В большем количестве операционных систем UNIXy (или Cygwin), модуль pexpect доступен, который рассказывает все необходимые заклинания для предотвращения связанных с буферизацией проблем. Однако эти заклинания требуют работы модуль имущества , который не доступен на собственном компоненте (non-cygwin) сборки win32 Python.
В случае в качестве примера, где Вы управляете подпроцессом, у Вас может просто быть он вызов sys.stdout.flush()
, в случае необходимости - но для произвольных подпроцессов, та опция не доступна.
Видят также вопрос, "Почему не только используют канал (popen ())?" в pexpect FAQ.