首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python做shell反引用?

问用python做shell反引用?
EN

Stack Overflow用户
提问于 2011-03-21 19:52:49
回答 4查看 2.3K关注 0票数 4

出于某些原因,我正在将bash脚本转换为python。

Python的功能更强大,然而,像这样编写简单的bash代码要困难得多:

代码语言:javascript
复制
MYVAR = `grep -c myfile`

在python中,我首先要定义的反引号函数可能是:

代码语言:javascript
复制
def backquote(cmd,noErrorCode=(0,),output=PIPE,errout=PIPE):
    p=Popen(cmd, stdout=output, stderr=errout)
    comm=p.communicate()
    if p.returncode not in noErrorCode:
        raise OSError, comm[1]
    if comm[0]:
        return comm[0].rstrip().split('\n')

这太无聊了!

有没有Python的味道(IPython ?)在哪里可以很容易地产生进程并返回输出?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-21 19:55:35

在Python2.7或更高版本中,有一个subprocess.check_output(),它基本上可以做你想做的事情。

票数 9
EN

Stack Overflow用户

发布于 2011-03-21 19:57:14

os.subprocess documentation介绍了如何替换反引号:

代码语言:javascript
复制
output=`mycmd myarg`
==>
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
票数 4
EN

Stack Overflow用户

发布于 2011-03-21 19:54:42

定义了这个backquote函数后,您可以从程序和交互式shell (IPython等)中一次又一次地调用它。

在Python中没有直接使用这种“反引号”的方法,这是有充分理由的。Python以其可读性而闻名,而在该语言中具有这样的结构会导致无法阅读的“脚本”代码。话虽如此,对于返回子进程输出的函数来说,backquote可能不是最具描述性的名称。

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

https://stackoverflow.com/questions/5377229

复制
相关文章

相似问题

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