我找到了一些其他解决方案,例如:
df -Ph /oracle/archive | awk 'NR == 2{print $5}' | tr -d '%'
但是它们看起来有点太多了,我认为存在更优雅的东西,因为我将直接转到subprocess.check_output()
中的python2.7
。
以下是df
的示例输出:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7508524 4890644 2258240 69% /
我想只获取69
值。
任何人都可以帮助我吗?
非常感谢
答案 0 :(得分:0)
那个不优雅的是什么?您将输出管道输出到 awk ,其中表示"提取第2行,字段5"。这会导致翻译命令,该命令会将百分号变为空白。短而直接。
在Python中执行此操作需要更多代码:
在全开不可读模式下,它可能看起来像
print <system_call>[1].split()[4][:-1]
...您已经知道系统调用。
哪个更容易阅读和维护?你的选择。
答案 1 :(得分:0)
statvfs
将提供有关分区上空闲或可用块的信息,而无需调用子进程:
>>> import os
>>> st = os.statvfs('/')
>>> (st.f_blocks - st.f_bavail) / st.f_blocks
0.692345901307951
$ df -Ph /oracle/archive | awk 'NR == 2{print $5+0}'
69
Awk会将$5
视为字符串。通过向其添加零,我们强制awk将其转换为数字并消除%
。
df -Ph /oracle/archive | grep -Po '\d+(?=%)'
69
-o
告诉grep只打印匹配的字符串。 \d+(?=%)
会在%
后面找到数字,但在匹配中不会包含%
。
这需要grep的-P
选项,这需要GNU grep。
答案 2 :(得分:0)
尝试
echo $(df --output=pcent /oracle/archive) | tr -d 'Use% '
--output = pcent选项仅选择使用百分比字段。但是它也会打印标题。
echo命令将输出展平为单个字符串。
tr命令删除不需要的字符作为标题,前导空格和百分号。
答案 3 :(得分:0)
df --output=pcent /oracle/archive |egrep -o "[0-9]+"
或设置一个变量:
pcent_used=$(df --output=pcent /oracle/archive |egrep -o "[0-9]+")