ExASIC
分享让工作更轻松

在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是没有问题的,可以进行多次处理和筛选。

阅读数:
更多文章:文章目录
解惑专区
(支持markdown插入源代码)
欢迎使用ExASIC订阅服务
仅用于ExASIC最新文章通知,方便及时阅读。
友情链接: 白山头IC技术圈问答ReCclayCrazyFPGA