Как динамически сохранить стандартный вывод в переменную, список или массив numpy? - PullRequest
1 голос
/ 12 июля 2020
• 1000 что я могу использовать
sys.stdout = mystdout = StringIO()
#...
mystdout.getvalue()

для сохранения stdout в переменную, но проблема в том, что последовательный порт всегда передает данные, поэтому mystdout.getvalue() никогда не запустится.

Есть ли способ сохранить то, что выводит последовательный порт, в переменную, список или массив numpy, скажем, каждый раз, когда последовательный порт выводит другое значение, то есть с фиксированной задержкой, которую я могу изменить (в настоящее время это 50 мс)?

1 Ответ

1 голос
/ 12 июля 2020

Что вы хотите, так это использовать Popen, поскольку он позволяет вам получить доступ к stdout во время выполнения команды. subprocess.run выполняет команду и ждет ее завершения sh.

Попробуйте это

import subprocess

process = subprocess.Popen(
    ['python', '-m', 'serial.tools.miniterm', 'COM3'],
    shell=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)

for line in iter(process.stdout.readline, b""):
    parsed_line = line.decode().strip()

process.wait()

...