考虑以下内容:
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)