我有一个案例想要在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“选项,所以我尝试了以下代码,
>>> 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
我是不是在代码中遗漏了一些要点?有什么建议/想法吗?提前谢谢。
发布于 2012-02-22 19:01:57
从手册中:
若要在结果元组中获取除None以外的任何值,您需要提供stdout=PIPE和/或stderr=PIPE
p2 = subprocess.Popen(["grep", "-c", "test"], stdin=p1.stdout, stdout=subprocess.PIPE)
发布于 2012-02-22 19:02:05
请看这里:
>>> 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
>>> 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)
>>>
发布于 2015-09-14 21:44:06
>>> import subprocess
>>> mycmd=subprocess.getoutput('df -h | grep home | gawk \'{ print $1 }\' | cut -d\'/\' -f3')
>>> mycmd
'sda6'
>>>
https://stackoverflow.com/questions/9393425
复制相似问题