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]+")