Python 无法获得 iotop 输出

Python not able to get iotop output

我正在编写一个 python 脚本,它需要读取 iotop 的输出。但是标准输出似乎是空白的。目标是将 iotop 的输出存储为一个字符串,稍后我可以搜索和使用它。这是 Ubuntu 16.04 w/ python 3.6 上的 运行。我用 "sudo python3.6 script.py" 调用脚本,因为 iotop 需要管理员权限。

p = subprocess.Popen(['iotop','-b','-n','1','-a','-k'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
try:
    outs, errs = p.communicate(timeout=15)
except subprocess.TimeoutExpired:
    p.kill()
    outs, errs = p.communicate()
returncode=p.returncode
print(outs.decode('UTF-8'))

运行 bash 终端中的这个命令给了我预期的输出。我做错了什么?

sudo iotop -b -n 1 -a -k

"-n""1" 应该是单独的列表元素

删除 shell=True 使代码按我想要的方式工作。

p = subprocess.Popen(['iotop','-b','-n','1','-a','-k'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)