Tob*_*obi 4 python carriage-return
正如对我的问题“ Python:启动终端程序并在其运行时解析其输出”的回答中所建议的,我正在使用子进程构造与程序进行通信:
server = subprocess.Popen(["meteor", "--port", port], stdout=subprocess.PIPE)
for line in iter(server.stdout.readline, ""):
# Do something for example
print(line)
Run Code Online (Sandbox Code Playgroud)
问题是:当消息重复时,子进程(服务器)不会直接以换行符结束每一行,因为它将 (x2) 放在一行的末尾。
但我想对每一行更新做出反应。所以,我想处理\r像\n,而不只是迭代过完线,我想遍历可用的字符,直到下一个“暂停”羯羊它是一个\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),
Run Code Online (Sandbox Code Playgroud)
您需要为断开的连接或没有更多数据添加错误处理。