我有python脚本,使用subprocess.Popen
向matlab脚本发送命令。反过来,Matlab使用管道的stdout将数据发送回python。 Python和Matlab之间的通信应无限运行,但是,一旦从Matlab检索到信息,python应该运行自己的函数。问题是python从Matlab无限地等待信息。代码将明确说明:
class MatlabWrapper(object):
def __init__(self, barrier_fullname=DEFAULT_BARRIER_FULLNAME):
self.barrier_fullname = barrier_fullname
def run(self):
self.process = subprocess.Popen(
'matlab -nodisplay -nosplash', shell=True,
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=DEVNULL)
#self.process.stdin.write('matlabpool 8;\n')
self.process.stdin.flush()
def execute(self, cmd):
try:
os.remove(self.barrier_fullname)
except OSError:
pass
self.process.stdin.write(cmd)
self.process.stdin.write('; !touch %s\n' % self.barrier_fullname)
self.process.stdin.flush()
while True:
try:
with open(self.barrier_fullname, 'rb') as _:
break
except IOError:
time.sleep(0)
os.remove(self.barrier_fullname)
while True:
line = self.process.stdout.readline()
if line:
print '>>>' + line.rstrip()
else:
break
创建MatlabWrapper实例后,启动初始化管道的run
函数。然后我发送命令执行到Matlab,并等待它输出一些信息(使用printf
)。逐行读取stdout后,它将停在第line = self.process.stdout.readline()
行并等待来自matlab的更多信息。
我想要的是,当stdout中没有信息时,python将完成execute
功能。我该怎么做?