在python中读取/ proc / $ pid / status时出错

问题描述

我必须读取/proc/pid/status文件提取NSpid字段,如下所示:

user@user-HP-Pavilion-Notebook:~$ cat /proc/5979/status | grep NSpid
NSpid:  5979    1417

我必须从中提取1417

我在下面尝试过:

print("Traversing tree")
pid=5947
for c in psutil.Process(pid).children(True):
    cpid=c.pid
    print(str(c.pid))
    with open("/proc/cpid/status",'r') as origin_file:
        for line in origin_file:
            line = re.findall(r'NSpid',line)
            if line:
                line = line[0].split('"')[1]
            print(line)
            break

该程序遍历整个进程树,并为每个试图从状态文件提取NSpid的孩子提供帮助。 但我收到以下错误

Traversing tree
5979
Traceback (most recent call last):
  File "cmp.py",line 48,in <module>
    with open("/proc/cpid/status",'r') as origin_file:
FileNotFoundError: [Errno 2] No such file or directory: '/proc/$cpid/status'

该如何纠正?

解决方法

您声明了一个名为cpid的变量,正如我所看到的,您想在文件路径中使用该变量,因此可以使用f字符串。

cpid=c.pid
print(str(c.pid))
with open(f"/proc/{cpid}/status") as origin_file:
        ...

我仍然不确定要提取的值,所以这是我的解决方案,我搜索了流程的NSpid属性,并采用了它的值。

...
cpid = c.pid
with open(f"/proc/{cpid}/status") as origin_file:
    for line in origin_file.read().splitlines():
        if line.split()[0] == 'NSpid:':
            print(line.split()[2])
            break

如果要提取整个属性,只需更改print函数

# before
print(line.split()[2]) # changed this index from [1] to [2]
# after
print(line)