2012-03-27 112 views
1

我对Python完全陌生,现在我必须更改脚本,以便调用另一个程序并获取它的输出。我已经研究过了,所有的解决方案都指向类似在Python中正确使用Popen,或者类似的东西

p = sub.Popen('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}', shell=True,stdout=sub.PIPE,stderr=sub.PIPE) 
out,err=p.communicate() 
print out 

但是我无法让它工作。 “打印出来”什么都不打印。

我不得不将其与

os.system('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}') 

工作,但这种方式我不能让morphg的输出。

此外,我不完全明白第二部分是什么意思,但我知道它正确地调用该程序。只是输出是stdin,我需要它在一个变量中。

任何帮助?

P.S .: subprocess.check_output不是一个选项,因为我有Python 2.6。

+1

它通常被认为是一个坏主意,用个“shell =真”,并命令字符串传递给POPEN(出于同样的原因是使用使用os.system的()和老的popen *()函数是不鼓励的,因为有一些'(back tick)和$()(命令替换)以及其他可以插入命令的字符串导致意想不到的后果)。最好将shell = False(缺省值)并传递一个列表(向量):['echo',s] ---尽管如此,您必须为此示例设置多个进程并自己安排管道。 – 2012-03-27 19:10:45

+0

我已经读过,但我不知道该怎么做。= P – elithin 2012-03-27 19:16:02

回答

0

试试这个:

import os 
p = os.popen('echo '+s+' | ${morphg_res:-./morphg.ix86_linux -t}') 
out = p.read() 
print out 
+0

非常感谢! – elithin 2012-03-27 19:18:02

+0

很高兴我能帮忙! :) – 2012-03-27 19:23:15

相关问题