在python中如何支持linux管道操作
专栏:ExASIC Nov. 10, 2024, 2:11 p.m. 59 阅读
在python中如何支持linux管道操作

比如,我们有个需求:linux命令ls,对ls的输出做进一步的处理,再显示处理之后的结果。

从管道中读取输入文本或者数据

本质上,管道|的输出,对于下一级来说就是stdin。我们用sys.stdin来读取。假设这个处理脚本名为test.py,代码如下:

#!/usr/bin/env python3

import sys

in_log = sys.stdin.readlines()
print(in_log)

chmod +x test.py设置为可执行后,我们来测试一下:ls | ./test.py,效果如下,得到一个python列表,里面存放着文件名和文件夹名:

['file_a.txt\n', 'file_b.txt\n', 'dir_a\n', 'dir_b\n']

文本处理

这一部分不是这篇文章的重点。比如,我们来过滤一下,只显示文件夹:

import os

for line in in_log:
    line = line.strip()
    if os.path.isdir(line):
        print(line)

多个管道级联

多个管道级联时,上一级的输出作为下一级的输入。这里的输出就是指输出到屏幕,对应到python就是简单的print。所以上面的代码已经支持多个管道级联。

经过测试,ls | ./test.py | ./test2.py是没有问题的,可以进行多次处理和筛选。

感谢阅读,更多文章点击这里:【专栏:ExASIC】
最新20篇 开设专栏