一、 需求
linux下获取当前进程所在内核的ID
二、参考
这里主要参考了3部分文章。
但是不了解psutil库, 不知道有没有直接获取 core id 的方法。
-
这个os库有个popen方法, 是可以通过用 python 执行 shell 命令的, 和 os.system() 有区别,os.system()只返回脚本的退出状态码,而os.popen()却可以得到脚本的执行结果。
# windows
import os
cpu = os.popen('wmic cpu get processorid').read()
cpu = cpu.strip().replace('\n', '').replace('\r', '').split(" ")
cpu = cpu[len(cpu)-1]
print(cpu)
# Linux
import os
cpu = os.popen('/proc/cpuinfo').read()
cpu = cpu.strip().replace('\n', '').replace('\r', '').split(" ")
cpu = cpu[len(cpu)-1]
print(cpu)
但是,即便在 linux 的 root 用户,执行上面的脚本,还是会没有权限执行:
/proc/cpuinfo Permission denied
当前还不知道有什么办法能够解决,希望有思路 的好心人能给些建议。
这里找到一篇解决办法,然鹅不相关,没办法解决当前问题:
python 使用os.popen运行Linux命令权限问题
参考:
(1) python os.popen() 方法
(2)os.system
(3)Python os.popen() 方法
(4)python 使用os.popen运行Linux命令权限问题
- subprocess 库
找不到原创参考连接了,sorry。
import subprocess
cmd = subprocess.Popen(['sudo','echo cat /proc/cpuinfo'],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, error = cmd.communicate()
memory = out.splitlines()
print(memory)
当然,水平太菜, 还是不会用, 所以还是没成功。
随便附上一篇参考:
(1)python中的subprocess.Popen()使用
三、最终办法
当然没有创造新库和新思路,而且在上面几种思路的基础上,换了一条shell命令….
还是使用 os.popen()方法获取脚本的执行结果,不过这次的脚本不是直接查看 CPU文件的信息,而是使用
ps -eo pid,args,psr
这一行bash 会在终端打印出每个PID 对应的 CPU ID, 而且是一行一行的,所以需要当成字符串付给一个变量。
这里按照每行切割成一个list中的元素。
参考:
四、附上最终代码
import os
"""
method : get_cpu_id(pid: int) -> str
"""
def get_cpu_info() -> list:
cmd = 'ps -eo pid,args,psr'
cmd_res = os.popen(cmd).read()
cmd_res = cmd_res.split('\n')
cmd_res = cmd_res[1:-1]
cpu_info = []
for s in cmd_res:
c = s[-1]
cpu_info.append(s[0:-1].strip() + f' {c}')
return cpu_info
def get_cpu_id(pid: int) -> str:
if pid is None or pid == 0:
return None
cpu_info = get_cpu_info()
if cpu_info is None or len(cpu_info) == 0:
return None
for s in cpu_info:
s: str
if s.find(str(pid)) != -1:
return s
return None
最后:
- 转载了很多原创作者的文章, 如果觉得有侵权 , 还请联系本人, 2627724977@qq.com
- 本文只是个人实践学习总结笔记,文章可能有很多疏漏和错误,以及很多可以优化的解决办法,还请随意评论指正探讨。