use*_*085 8 python unix parsing
我正在尝试创建一个简单的脚本,它将从unix df - h命令中选择特定的列.我可以用awk来做这个但是我们怎么能在python中做到这一点?
这是df -h输出:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_base-lv_root 28G 4.8G 22G 19% / tmpfs 814M 176K 814M 1% /dev/shm /dev/sda1 485M 120M 340M 27% /boot
我想要的东西:
第1栏:
Filesystem /dev/mapper/vg_base-lv_root tmpfs /dev/sda1
第2栏:
Size 28G 814M 485M
Gil*_*il' 11
您可以使用op.popen运行命令和检索它的输出,然后splitlines和split分割线和领域.如果列太长,则运行df -Ph而df -h不是分割线.
df_output_lines = [s.split() for s in os.popen("df -Ph").read().splitlines()]
Run Code Online (Sandbox Code Playgroud)
结果是一个行列表.要提取第一列,您可以使用[line[0] for line in df_output_lines](请注意,列从0开始编号),依此类推.您可能希望使用df_output_lines[1:]而不是df_output_lines去除标题行.
如果您已将输出df -h存储在某个文件中,则需要先加入这些行.
fixed_df_output = re.sub('\n\s+', ' ', raw_df_output.read())
df_output_lines = [s.split() for s in fixed_df_output.splitlines()]
Run Code Online (Sandbox Code Playgroud)
请注意,这假定文件系统名称和安装点都不包含空格.如果他们这样做(这可能在一些unix变体上有一些设置),实际上df甚至不可能解析输出df -P.您可以使用os.statvfs来获得(这是Python接口上给定的文件系统信息的C函数是df在内部对每个文件系统调用),但有枚举的文件系统没有可移植的方法.