gpt4 book ai didi

python - 什么是使用交换。 python 版本

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:25 25 4
gpt4 key购买 nike

我已经有一个 shell 脚本可以确定哪个进程正在使用交换以及交换量,但我宁愿在 python 中执行此操作。

Shell one-liner(我在网上找到这个脚本,但不记得它的来源):

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done| sort -k 2 -n

上面的脚本主要是查看/proc 并获取进程名称、PID 以及它使用了多少交换空间。

就 python 而言,来自 psutil 的 memory_maps()看起来很有希望,但我找不到输出指定进程名称或 PID 的位置。

我想做什么?我正在尝试重写一堆旧的 shell 脚本,这些脚本将 CPU、内存、交换、使用等收集到一个大的 python 程序中。我知道我可以使用 subprocess 或 shellexec 调用这些脚本,但我想尽可能避免这种情况。

我在问什么?有一个更好的方法吗?难道我的方法全错了吗?

编辑:

我在 python3 方面取得了一些进展。这是我的代码。

#!/usr/bin/python3
import re
import glob

class searchfile:
def __init__(self, file, searchstring1, searchstring2, searchstring3, searchstring4 ):
self.file = file
self.searchstring1 = searchstring1
self.searchstring2 = searchstring2
self.searchstring3 = searchstring3
self.searchstring4 = searchstring4

class searchparm(searchfile):
def printsearch(self):
hand = open(self.file)
for line in hand:
line = line.rstrip()
if re.search(self.searchstring1, line):
print (line)
if re.search(self.searchstring2, line):
print (line)
if re.search(self.searchstring3, line):
print (line)
if re.search(self.searchstring4, line):
print (line)


for file in glob.glob('/proc/*/status'):
search_proc = searchparm(file, 'Name', 'VmSwap', 'Pid:', 'VmSize:' )
print("#########################################")
print("#########################################")
print(search_proc.printsearch())

最佳答案

memory_maps()在psutil中只是一个内存映射指定进程的函数(不是针对每个进程)。

让我们从头开始 - psutil 提供了一个 pids() 方法来列出当前正在运行的所有进程,然后你必须创建一个 Process 对象,让你访问有关该特定进程的内存和其他指标。因此,例如,您可以编写 print psutil.Process().memory_maps() 来获取当前 Python 进程的内存映射(如果未提供 PID,则默认为正在运行的进程)。

这是一个示例,说明如何使用 psutil 获取与 shell 脚本相同的交换数据(请注意,您需要以 root 身份运行 Python 才能获取系统进程的信息):

for p in psutil.process_iter():  # quicker way to iterate
print p.pid, p.name(), p.memory_full_info().swap

示例输出:

...
669 kvm-irqfd-clean 0
731 systemd-timesyncd 475136
827 rpcbind 901120
837 ModemManager 3784704
846 thermald 983040
851 cron 409600
854 systemd-logind 647168
855 acpid 327680
859 avahi-daemon 413696
860 dbus-daemon 2416640
873 avahi-daemon 569344
879 NetworkManager 3088384
...

完整文档在 Process 中psutil 类。

关于python - 什么是使用交换。 python 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com