在Python中如何使用反引号?

4 投票
4 回答
2442 浏览
提问于 2025-04-16 14:07

我正在把bash脚本翻译成python,原因有一些。

虽然python功能更强大,但写一些简单的bash代码却要复杂得多,比如下面这样:

MYVAR = `grep -c myfile`

在python中,我首先得定义一个反引号函数,可能是:

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?)可以更简单地启动进程并获取输出呢?

4 个回答

2

定义了这个 backquote 函数后,你可以在你的程序里或者在交互式命令行(比如 IPython 等)中反复调用它。

在 Python 中没有直接使用这种“反引号”的方法,我觉得这是有原因的。Python 以其可读性著称,而这种写法会导致代码变得难以阅读,像脚本语言那样。话虽如此,backquote 这个名字可能并不能很好地描述这个函数的作用,因为它是用来返回一个子进程的输出的。

4

os.subprocess 的文档介绍了如何替换反引号:

output=`mycmd myarg`
==>
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
9

在Python 2.7或更高版本中,有一个叫做 subprocess.check_output() 的功能,它基本上可以满足你的需求。

撰写回答