运行包含管道的命令行并将结果显示到STDOUT

发布于 2021-01-29 18:40:19

一个人如何从Python调用一个包含管道的shell命令并捕获输出?

假设命令是这样的:

cat file.log | tail -1

我想要做的与Perl相当的东西是这样的:

my $string = `cat file.log | tail -1`;
关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用subprocess.PIPE,如子流程文档部分“替换外壳管道”中所述

    import subprocess
    p1 = subprocess.Popen(["cat", "file.log"], stdout=subprocess.PIPE)
    p2 = subprocess.Popen(["tail", "-1"], stdin=p1.stdout, stdout=subprocess.PIPE)
    p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
    output,err = p2.communicate()
    

    或者,使用sh模块,管道成为功能的组合

    import sh
    output = sh.tail(sh.cat('file.log'), '-1')
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看