如何使用与换行符不同的分隔符读取子进程标准输出
how to read subprocess stdout using a different separator from line break
我想我可以使用 from J.F. Sebastian's answer in another thread 使用行缓冲区逐行读取子进程
p = Popen(["command", "args"], stdout=PIPE, bufsize=1)
with p.stdout:
for line in iter(p.stdout.readline, b''):
print(line, end='\n')
我要解决的问题是我的输出没有换行符,而是使用特殊字符(例如“#”)来表示终止,我想在打印时将其视为换行符。
您可以一次读取一个字符来检查分隔符:
p = Popen(["command", "args"], stdout=PIPE, universal_newlines=True)
tmp = ""
delims = {"#", "!"}
for ch in iter(lambda: p.stdout.read(1), ""):
if ch in delims:
print(tmp)
tmp = ""
else:
tmp += ch
不是最漂亮的解决方案,但如果您有多个定界符,我看不到很多其他方法可以做到这一点。
我想我可以使用 from J.F. Sebastian's answer in another thread 使用行缓冲区逐行读取子进程
p = Popen(["command", "args"], stdout=PIPE, bufsize=1)
with p.stdout:
for line in iter(p.stdout.readline, b''):
print(line, end='\n')
我要解决的问题是我的输出没有换行符,而是使用特殊字符(例如“#”)来表示终止,我想在打印时将其视为换行符。
您可以一次读取一个字符来检查分隔符:
p = Popen(["command", "args"], stdout=PIPE, universal_newlines=True)
tmp = ""
delims = {"#", "!"}
for ch in iter(lambda: p.stdout.read(1), ""):
if ch in delims:
print(tmp)
tmp = ""
else:
tmp += ch
不是最漂亮的解决方案,但如果您有多个定界符,我看不到很多其他方法可以做到这一点。