问题描述
我必须读取/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)