gpt4 book ai didi

python 子进程更新它的行 (\r) - 我需要每次更新

转载 作者:太空宇宙 更新时间:2023-11-03 15:11:32 25 4
gpt4 key购买 nike

正如在对我的问题“Python: start terminal program and parse its output while it's running”的回答中所建议的,我正在使用子进程构造与程序通信:

server = subprocess.Popen(["meteor", "--port",  port], stdout=subprocess.PIPE)

for line in iter(server.stdout.readline, ""):
# Do something for example
print(line)

问题是:当消息重复时,子进程(服务器)不会直接以换行符结束每一行,因为它会将 (x2) 放在行尾。

但我想对每行更新使用react。所以我想像 \n 一样处理 \r 而不仅仅是遍历完成的行,我想遍历可用的字符串直到下一个“暂停”是否是\r\n 或其他换行符以在信息出现时直接获取信息,而不仅仅是在服务器发送 \n 时。我该怎么做?

最佳答案

也许如果您尝试使用非阻塞管道连接。然后像套接字连接一样读取流(在 while(true) 循环中)...希望这会为您指明正确的方向。

from fcntl import fcntl, F_GETFL, F_SETFL
from os import O_NONBLOCK, read

server = subprocess.Popen(["meteor", "--port", port], stdout=subprocess.PIPE)
flags = fcntl(server.stdout, F_GETFL) # get current p.stdout flags
fcntl(server.stdout, F_SETFL, flags | O_NONBLOCK)

while True:
print read(server.stdout.fileno(), 1024),

您需要为连接断开或没有更多数据添加错误处理。

关于python 子进程更新它的行 (\r) - 我需要每次更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26007407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com