Почему stdout pipe readline () не ждет нового персонажа?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему stdout pipe readline () не ждет нового персонажа?

Сообщение Anonymous »

Почему Print (Line) в read_stdout Печать каждого символа вместо всей строки? Я ожидаю, что он добавит в очередь после достижения персонажа Newline, но вместо этого он просто помещает каждого персонажа. < /P>
plugin_test.py:
from subprocess import PIPE, Popen
from threading import Thread
from queue import Queue, Empty
import re
import os
import sys

def read_stdout(stdout, data_q):
for line in stdout.readline():
print(line)
data_q.put(line)
stdout.close()

class Plugin():
name = ''

def __init__(self, **kwargs) -> None:
self.process = None

def run(self) -> bool:
try:
self.process = Popen(
[sys.executable, 'test.py'],
stdin=PIPE,
stdout=PIPE,
text=True)
except Exception as exc:
print("Could not create plugin process {}. {}".format(self.name, exc))
return False

self.data_q = Queue()
self.read_t = Thread(target=read_stdout, args=(self.process.stdout, self.data_q))
self.read_t.daemon = True
self.read_t.start()

try:
startup = self.data_q.get(timeout=10)
except Empty:
print("Plugin took to long to load {}.".format(self.name))
self.stop()
return False
else:
if 'Error' in startup:
print("Could not load plugin {}. {}".format(self.name, startup))
self.stop()
return False
elif '100%' in startup:
print("Plugin \"{}\" started.".format(self.name))

return True

def write(self, data : str) -> None:
self.process.stdin.write(data)
self.process.stdin.flush()

def read(self) -> str:
try:
data = self.data_q.get()
print("Got data ::{}::".format(data))
except Exception as exc:
print("Error reading data from plugin '{}'".format(exc))

def stop(self):
self.process.terminate()
self.process.wait()

if __name__ == '__main__':
plugin = Plugin()
plugin.run()
< /code>
test.py:
print("this is a test")
print("this is a test2")
print("100%")
< /code>
root@osboxes# python plugin_test.py

t
h
i
s

i
s

a

t
e
s
t


Подробнее здесь: https://stackoverflow.com/questions/795 ... -character
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему stdout pipe readline () не ждет нового персонажа?
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Ничего не происходит после subprocess.stdout.readline()/subprocess.stdout.read()
    Anonymous » » в форуме Python
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Как прочитать STDOUT через Pipe из дочернего процесса, который не завершается с помощью CreateProcess
    Anonymous » » в форуме C++
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Не могу получить GNU Readline с Bash для использования STDOUT/FD1 в качестве RL_OUTSTREAM
    Anonymous » » в форуме Linux
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Не могу получить GNU Readline с Bash для использования STDOUT/FD1 в качестве RL_OUTSTREAM
    Anonymous » » в форуме Linux
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»