'Popen'对象不可迭代

Dee*_*Dee 1 python linux subprocess list python-3.x

我试图通过subprocess命令将一些ID提取到列表中。下面是我的代码:

list1=[]
list2=[]
list1 = subprocess.Popen("pgrep -u root",stdout=subprocess.PIPE, shell = True)
for i in list1:
    file1 = open(os.path.join('/proc',i,'status')).readlines()
    for line in file1:
        if line.startswith("Mem: "):
             id = int(line.split()[5])
        if line.startswith("Cpu: "):
             toC = int(line.split()[8])
list2 = (id,toC)
for k in list2:
    self.text.insert(INSERT,k[0])
    self.text.insert(INSERT,k[1])
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:'Popen'对象不可迭代。我正在创建一个列表,并将ID提取到列表中,然后对于列表中的每个ID,我都试图获取mem和cpu信息。该信息再次输入到另一个空列表(list2)。我正在遍历list2以显示这些信息。我要去哪里错了?

Rya*_*ing 5

如果需要调用的结果,则需要与子流程对象进行通信

proc = subprocess.Popen(['pgrep', '-u', 'root'], stdout=subprocess.PIPE)
text = proc.communicate()[0].decode('utf-8')

for i in text.splitlines():
    ...
Run Code Online (Sandbox Code Playgroud)

该Popen对象不是流程的输出,它是代表正在运行的子流程的对象。

还应避免,shell=True如果您可以这样做,因为它被广泛认为是安全问题,并且在这里不需要它。