2014-10-11 24 views
3

我想从我的Groovy脚本执行python外部过程,但它不产生任何输出。Groovy脚本无法执行外部过程

所以,作为一个小的完整性测试我试图简单地输出Python版本:

def command = """ /usr/local/bin/python -V """ 
    def proc = command.execute() 
    proc.waitFor() 
    println "This is output: " + proc?.in?.text 

以上不产生任何输出,不过,从我的命令行我能够运行/usr/local/bin/python -V

奇怪的是,如果我修改脚本运行identify,那么它确实会产生一个输出。

def command = """ /usr/local/bin/identify --version """ 
    def proc = command.execute() 
    proc.waitFor() 
    println "This is output: " + proc?.in?.text 

什么能导致这种行为?

回答

3

python -V命令将版本号打印到标准错误而不是标准输出。

$ python -V 
Python 2.7.8 
$ python -V 2>/dev/null 
$ 

因此,要输出,重定向标准错误(2)到stdout(1):

def command = """ /usr/local/bin/python -V 2>&1 """ 
def proc = command.execute() 
proc.waitFor() 
println "This is output: " + proc?.in?.text 

或者,你可以使用err代替in得到标准错误输出:

def command = """ /usr/bin/python -V """ 
def proc = command.execute() 
proc.waitFor() 
println "This is output: " + proc?.err?.text 
+0

哇,永远不会知道这一点。我的Python脚本输出的东西使用'打印'的东西“'不工作,这就是为什么我尝试'-V'。那是否会打印到标准输出? – Anthony 2014-10-11 03:15:48

+0

'print'语句(在PYthon 3.x中的函数)会将消息打印到标准输出,除非您使用>> >> sys.stderr'(或Python 3.x中的'file = sys.stderr') – falsetru 2014-10-11 03:16:47