可以识别何时处理io中的最后一行.readline迭代



考虑以下内容:

from typing import Callable
def execShellCmd(self, dataLineReceiver: Callable = None):
try:
p = subprocess.Popen(
shlex.split(self._cmd),
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
env=None,
bufsize=0,
cwd=self.cwd,
text=True
)
while p.poll() is None:
line = p.stdout.readline()
self.parseLine(line, p.returncode, dataLineReceiver)

for line in p.stdout.readlines():
self.parseLine(line, p.returncode, dataLineReceiver)

p.stdout.close()

return p.returncode
except Exception as ex:
print("Exception: {}".format(ex))
return -1

我将从stdout读取的每一行传递给parseLine函数,然后传递给函数/方法dataLineReceiver。我想指示数据接收器,当它得到最后一行,这样它就知道没有更多的数据线来了,可以做其他事情。

。更改以下代码以获得bool或其他指示符:

for line in p.stdout.readlines():
self.parseLine(line, p.returncode, dataLineReceiver, lastlinebool)

如果到达EOF之前的最后一行,lastlinebool将为True或False。

由于您使用的是readlines(),因此您会收到一个行列表,并且通过获取其长度,如果您跟踪计数,您将知道哪个迭代是最后一个。

stdout_lines = p.stdout.readlines()
num_lines = len(stdout_lines)
for i, line in enumerate(stdout_lines):
lastlinebool = (i == num_lines - 1)
self.parseLine(line, p.returncode, dataLineReceiver, lastlinebool)

相关内容

  • 没有找到相关文章

最新更新