我试图弄清楚如何在Python中处理进程的实时,持续的输出。我的队友给了我一个脚本,我们称之为applicationAPI.py,它做了以下事情:
1.建立到主机设备TCP连接
1.定义要从主机设备上的应用程序提取的多个指标
1.在定义的时间间隔内以CSV格式LIVE将这些指标输出到我的stdout,在本例中每60秒一次。
我试图做的是从这个过程中捕获这个实时输出数据,并在我自己的python脚本中解析它。我尝试使用子进程与以下
import subprocess
import csv
import json
api_call = subprocess.run(['./applicationAPI.py', '-target_ip', '-username',
'-password', 'metric1', 'metric2', 'metric3', '-u', '60'], capture_output=True, text=True, check=True)
api_response = (api_call.stdout)
f = StringIO(api_response)
reader = csv.reader(f)
for line in reader:
print(line)
但没有用。问题是这个过程还在进行中。在60秒的时间间隔内,它将继续向stdout输出数据。但它从不返回返回代码或完成执行。我试着只重定向到一个文件,但同样,因为它的过程相同,输出文件只会不断增长。我不知道如何捕获或操作这些数据以便在脚本中解析它。
1条答案
按热度按时间mlnl4t2r1#
您可以使用较低级别的
Popen
类,它提供了stdout
和stderr
管道来读取。启动进程时重定向文件的stderr,然后从stdout读取csv信息,直到进程完成。最后等待进程结束并读取返回代码。这不是真实的的时间因为您使用的是管道,而不是终端,所以程序将缓冲stdout。您将只看到块大小边界上的输出(可能每2048字节,但取决于系统)。有时程序包含一个标志,告诉它刷新每个换行符上的stdout。也许这个计划有一个或它可以实施?