使用subprocess.Popen捕获mongo shell输出

时间:2013-05-10 17:42:40

标签: python mongodb subprocess

我正在尝试以下方法:

#!/usr/bin/python

import os, subprocess

func = 'print("Hello World")'

x = subprocess.Popen(['mongo', '--eval', func], stdout=subprocess.PIPE,            
stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print x.stdout.read()
print x.stderr.read()

但我得到的只是:

MongoDB shell version: 2.2.3

接着是两个新行。如何捕获函数执行的输出?

2 个答案:

答案 0 :(得分:1)

读取管道获取目前管道内的任何内容。你的mongo正在等待连接到localhost。由于它的返回速度不够快,因此读取命令无法获得结果。这可能是因为您没有在本地运行mongo,但如果您不等待子进程完成,则会反复遇到此问题。

答案 1 :(得分:0)

另外,请记住,据我所知,subprocess.Popen不会阻止。如果您希望在尝试获取输出之前完成该函数,则可能需要进行x.wait()调用。