Python-如何使用管道执行Shell命令,但不使用'shell = True'?

发布于 2021-01-29 18:29:41

我有一种情况想要在Python中执行以下shell命令并获取输出,

echo This_is_a_testing | grep -c test

我可以使用此python代码在python中执行上述shell命令,

>>> import subprocess
>>> subprocess.check_output("echo This_is_a_testing | grep -c test", shell=True)
'1\n'

但是,由于我 不想使用“ shell = True”选项 ,因此我尝试了以下python代码,

>>> import subprocess
>>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE)
>>> p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout)
>>> p1.stdout.close()
>>> p2.communicate()
(None, None)

我想知道为什么我参考网页中的描述时输出为“
None”:http :
//docs.python.org/library/subprocess.html#subprocess.PIPE

我是否错过了代码中的某些要点?有什么建议/想法吗?提前致谢。

关注者
0
被浏览
141
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    从手册中:

    要在结果元组中获得除None以外的任何内容,您需要提供stdout = PIPE和/或stderr = PIPE

    p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout, stdout=subprocess.PIPE)
    


知识点
面圈网VIP题库

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

去下载看看