在Python中,Ruby和Perl中的反引号对应的是什么?也就是说,在Ruby中我可以这样做:
foo = `cat /tmp/baz`
在Python中等价的语句是什么样子的?我尝试过os.system("cat /tmp/baz")
,但它将结果标准化,并返回给我该操作的错误代码。
发布于 2009-09-11 13:53:48
output = os.popen('cat /tmp/baz').read()
发布于 2009-09-11 13:52:17
最灵活的方法是使用subprocess
模块:
import subprocess
out = subprocess.run(["cat", "/tmp/baz"], capture_output=True)
print("program output:", out)
capture_output
是在Python3.7中引入的,对于较老的版本,可以使用特殊的函数check_output()
:
out = subprocess.check_output(["cat", "/tmp/baz"])
如果您需要细粒度控制,也可以手动构造子流程对象:
proc = subprocess.Popen(["cat", "/tmp/baz"], stdout=subprocess.PIPE)
(out, err) = proc.communicate()
所有这些函数都支持keyword parameters自定义子流程的执行方式。例如,如果您需要*
的文件名扩展之类的东西,您可以使用shell=True
通过shell执行程序,但这是limitations附带的。
发布于 2011-09-19 17:58:23
foo = subprocess.check_output(["cat", "/tmp/baz"])
https://stackoverflow.com/questions/1410976
复制相似问题