如何使用Python捕获fio的非阻塞实时输出

2024-04-26 21:01:59 发布

您现在位置:Python中文网/ 问答频道 /正文

>>>x = subprocess.Popen(["fio", "--filename=/dev/sdd", "--name=job1", "--numjobs=2"], stdout=subprocess.PIPE)

但我需要实时捕捉飞行情报室的进展。我想做一个线程子进程.stdout.readline,但似乎无法更新性能数据:

^{pr2}$

它就挂在这之后。在

fio的命令行执行如下所示:

[root@goblinbank tmp]# fio --filename=/dev/sdd --name=job1 --numjobs=2
job1: (g=0): rw=read, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
...
fio-2.2.11
Starting 2 processes
Jobs: 2 (f=2): [R(2)] [0.2% done] [246.3MB/0KB/0KB /s] [63.5K/0/0 iops] [eta 02h:26m:09s]

“Jobs:2(f=2):[R(2)]”后面的文本用新值保持刷新。在


Tags: namedev进程stdoutjobsfilename线程fio
2条回答

然后可以使用fcntl将其设置为非阻塞IO,如果数据不可读取,它将引发异常。只需添加:

fcntl.fcntl(process.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)

创建进程后,使用try/except IOError子句验证是否有要读取的内容,如下所示:

^{pr2}$

这就解决了这个问题:

x = subprocess.Popen(["fio", " filename=/dev/sdd", " name=job1", " numjobs=2", " eta=always"], stdout=subprocess.PIPE, universal_newlines=True)

注意fio中的 eta=always标志,Popen中的universal_newlines=True参数。在

更多信息here。在

相关问题 更多 >