首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python -如何使用管道执行shell命令,但不使用'shell=True'?

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

Stack Overflow用户
提问于 2012-02-22 18:54:24
回答 5查看 57.8K关注 0票数 38

我有一个案例想要在Python中执行以下shell命令并获得输出,

代码语言:javascript
复制
echo This_is_a_testing | grep -c test

我可以使用这段python代码在python中执行上面的shell命令,

代码语言:javascript
复制
>>> import subprocess
>>> subprocess.check_output("echo This_is_a_testing | grep -c test", shell=True)
'1\n'

但是,由于我不想使用"shell=True“选项,所以我尝试了以下代码,

代码语言:javascript
复制
>>> 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

我是不是在代码中遗漏了一些要点?有什么建议/想法吗?提前谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-22 19:01:57

从手册中:

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

代码语言:javascript
复制
p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout, stdout=subprocess.PIPE)
票数 29
EN

Stack Overflow用户

发布于 2012-02-22 19:02:05

请看这里:

代码语言:javascript
复制
>>> import subprocess
>>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE)
>>> p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout)
>>> 1
p1.stdout.close()
>>> p2.communicate()
(None, None)
>>>

在这里,您在编写p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout)之后得到1作为输出,不要在您的问题的上下文中忽略此输出。

如果这是您想要的,那么将stdout=subprocess.PIPE作为参数传递给第二个Popen

代码语言:javascript
复制
>>> p1 = subprocess.Popen(["echo", "This_is_a_testing"], stdout=subprocess.PIPE)
>>> p2 = subprocess.Popen(["grep", "test"], stdin=p1.stdout, stdout=subprocess.PIPE)
>>> p2.communicate()
('This_is_a_testing\n', None)
>>>
票数 34
EN

Stack Overflow用户

发布于 2015-09-14 21:44:06

代码语言:javascript
复制
>>> import subprocess

>>> mycmd=subprocess.getoutput('df -h | grep home | gawk \'{ print $1 }\' | cut -d\'/\' -f3')

>>> mycmd 

'sda6'

>>>
票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9393425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档