首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python subprocess.Popen vs os.popen

python subprocess.Popen vs os.popen
EN

Stack Overflow用户
提问于 2013-07-29 13:51:05
回答 1查看 9.7K关注 0票数 0

我正在尝试在我的python脚本中获得以下shell命令的输出,

代码语言:javascript
复制
hadoop fs -ls /projectpath/ | grep ^d | grep -v done | head -1 | awk {'print $8'}

我可以通过os.popen成功获取输出,如下所示:

代码语言:javascript
复制
import os
cmd = "hadoop fs -ls /projectpath/ | grep ^d | grep -v done | head -1 | awk {'print $8'}"
p = os.popen(cmd,"r")
while 1:
    line = p.readline()
    if not line: break
    print line

但是从Python2.6开始就不推荐使用os.popen()了,所以我想用subprocess.Popen()函数替换上面的代码片段。

但是下面的subprocess.Popen()代码片段给出的结果与上面的代码片段不同。

代码语言:javascript
复制
import subprocess as sub
import shlex
cmd = "hadoop fs -ls /projectpath/ | grep ^d | grep -v done | head -1 | awk {'print $8'}"
args = shlex.split(cmd)
p = sub.Popen(args,stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
print output

上面的命令只是给出了命令的'hadoop fs -ls /projectpath/'部分的输出。我已经尝试在几个参考文献(http://docs.python.org/2/library/subprocess.html#popen-objectsPython, os.system for command-line call (linux) not returning what it should?)中查找subpocess.Popen(),但无法让它执行字符串cmd中的命令。谁能指出我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-29 14:00:28

试试这个:

代码语言:javascript
复制
cmd = "hadoop fs -ls /projectpath/ | grep ^d | grep -v done | head -1 | awk {'print $8'}"
p = sub.Popen(cmd,stdout=sub.PIPE,stderr=sub.PIPE, shell=True)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17916876

复制
相关文章

相似问题

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