使用Python迭代挂载点

dru*_*ist 9 python shell

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

另外,我只是编写一个Python脚本来监视挂载点使用情况并发送电子邮件通知.与Python脚本相比,作为普通的shell脚本执行此操作会更好/更快吗?

谢谢.

Mic*_*mia 21

Python和跨平台方式:

pip install psutil  # or add it to your setup.py's install_requires
Run Code Online (Sandbox Code Playgroud)

然后:

import psutil
partitions = psutil.disk_partitions()

for p in partitions:
    print p.mountpoint, psutil.disk_usage(p.mountpoint).percent
Run Code Online (Sandbox Code Playgroud)


ise*_*dev 5

从 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()
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*tch 2

我不知道有哪个库可以做到这一点,但您可以简单地启动mount并返回列表中的所有安装点,如下所示:

import commands

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

该代码从命令中检索所有文本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)
Run Code Online (Sandbox Code Playgroud)

获得挂载点(mntpoints列表)后,您可以使用for in如下代码来处理每个挂载点:

for mount in mntpoints:
    # Process each mount here. For an example we just print each
    print(mount)
Run Code Online (Sandbox Code Playgroud)

Python 有一个名为 的邮件处理模块smtplib,可以在Python 文档中找到信息