如何使用Python迭代Linux系统的挂载点?我知道我可以使用df命令来完成它,但是有没有内置的Python函数来执行此操作?
另外,我只是编写一个Python脚本来监控挂载点使用情况并发送电子邮件通知。与Python脚本相比,将它作为普通的shell脚本更好/更快?
感谢。
答案 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>
应替换为适当的字符串。