在Python中如何使用反引号?
我正在把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()
的功能,它基本上可以满足你的需求。