Python 使用df命令仅显示已使用的百分比

Python 使用df命令仅显示已使用的百分比,python,linux,bash,shell,grep,Python,Linux,Bash,Shell,Grep,我找到了一些其他解决方案,如: df-Ph/oracle/archive | awk'NR==2{print$5}| tr-d%% 但它们似乎有点太多了,我认为存在更优雅的东西,因为我将直接传递到子流程。检查python2.7中的\u output() 以下是df的输出示例: Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 7508524 4890644 2258240 69% / 我

我找到了一些其他解决方案,如:
df-Ph/oracle/archive | awk'NR==2{print$5}| tr-d%%

但它们似乎有点太多了,我认为存在更优雅的东西,因为我将直接传递到
子流程。检查
python2.7
中的\u output()

以下是
df
的输出示例:

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        7508524 4890644   2258240  69% /
我只想得到
69

有人能帮我吗


非常感谢

这有什么不优雅的地方吗?通过管道将输出传输到awk,其中显示“提取第2行,字段5”。这将管道传输到translate命令,该命令将百分比符号变为空白。简短直接

在Python中执行此操作需要更多代码:

  • 抓取返回字符串的第二行
  • 将其拆分为字符串列表
  • 以列表中的第五个元素为例
  • 切断尾随“%”字符
  • 打印结果
在完全打开不可读模式下,它可能看起来像

print <system_call>[1].split()[4][:-1]
print[1].split()[4][:-1]
。。。您已经知道系统调用的位置

哪个更容易阅读和维护?您的选择。

使用python缩短
statvfs
将提供分区上可用或可用块的信息,而无需调用子进程:

>>> import os
>>> st = os.statvfs('/')
>>> (st.f_blocks - st.f_bavail) / st.f_blocks
0.692345901307951
使用df和awk缩短 Awk将把
$5
视为一个字符串。通过向其添加零,我们强制awk将其转换为数字,从而消除了
%

使用df和GNU grep缩短
-o
告诉grep只打印匹配的字符串
\d+(?=%)
查找后跟
%
的数字,但在匹配中不包括
%

这需要grep的
-p
选项,grep需要GNU grep。

试试看

echo $(df --output=pcent /oracle/archive) | tr -d 'Use% '
--output=pcent选项仅选择使用百分比字段。但是,它也会打印标题

echo命令将输出平坦化为单个字符串

tr命令删除标题、前导空格和百分号等不需要的字符

df --output=pcent /oracle/archive |egrep -o "[0-9]+"
或设置一个变量:

pcent_used=$(df --output=pcent /oracle/archive |egrep -o "[0-9]+")

那有什么不优雅的?将输出通过管道传输到awk,awk表示“提取第2行,字段5”。这将通过管道传输到translate命令,该命令将百分号变为空白。简明扼要。我一直在到处找这个。您如何看待
使用%
并以某种方式将其“转换”为
pcent
?@Botspot pcent是df命令的“输出”参数的一个选项。这在df命令的手册页中指定。
df --output=pcent /oracle/archive |egrep -o "[0-9]+"
pcent_used=$(df --output=pcent /oracle/archive |egrep -o "[0-9]+")