使用Python迭代挂载点

时间:2014-09-30 03:52:26

标签: python shell

如何使用Python迭代Linux系统的挂载点?我知道我可以使用df命令来完成它,但是有没有内置的Python函数来执行此操作?

另外,我只是编写一个Python脚本来监控挂载点使用情况并发送电子邮件通知。与Python脚本相比,将它作为普通的shell脚本更好/更快?

感谢。

4 个答案:

答案 0 :(得分:18)

Python和跨平台方式:

pip install psutil  # or add it to your setup.py's install_requires

然后:

import psutil
partitions = psutil.disk_partitions()

for p in partitions:
    print p.mountpoint, psutil.disk_usage(p.mountpoint).percent

答案 1 :(得分:1)

我不知道有任何库可以执行此操作,但您只需启动mount并返回列表中的所有挂载点,例如:

import commands

mount = commands.getoutput('mount -v')
mntlines = mount.split('\n')
mntpoints = map(lambda line: line.split()[2], mntlines)

代码从mount -v命令检索所有文本,将输出拆分为行列表,然后解析表示挂载点路径的第三个字段的每一行。

如果您想使用df,那么您也可以这样做,但您需要删除包含列名称的第一行:

import commands

mount = commands.getoutput('df')
mntlines = mount.split('\n')[1::] # [1::] trims the first line (column names)
mntpoints = map(lambda line: line.split()[5], mntlines)

一旦你有了挂载点(mntpoints列表),你可以使用for in来处理每个点,如下所示:

for mount in mntpoints:
    # Process each mount here. For an example we just print each
    print(mount)

Python有一个名为smtplib的邮件处理模块,可以在Python docs

中找到信息

答案 2 :(得分:1)

这样做的bash方式,只是为了好玩:

awk '{print $2}' /proc/mounts | df -h | mail -s `date +%Y-%m-%d` "you@me.com"

答案 3 :(得分:1)

从Python中运行mount命令不是解决问题的最有效方法。您可以应用Khalid的答案并在纯Python中实现它:

with open('/proc/mounts','r') as f:
    mounts = [line.split()[1] for line in f.readlines()]        

import smtplib
import email.mime.text

msg = email.mime.text.MIMEText('\n'.join(mounts))
msg['Subject'] = <subject>
msg['From'] = <sender>
msg['To'] = <recipient>

s = smtplib.SMTP('localhost') # replace 'localhost' will mail exchange host if necessary
s.sendmail(<sender>, <recipient>, msg.as_string())
s.quit()

其中<subject><sender><recipient>应替换为适当的字符串。