Hi Ivan: Try to always call f.flush() after reading and writing operations in python?
Best regards! Jie Jiang CNGL, School of Computing, Dublin City University, Glasnevin, Dublin 9. Tel: +353 (0)1 700 6724 2010/5/4 Ivan Uemlianin <[email protected]> > Dear All > > I have this little python script to run quick tests on moses models (see > below). The same script works on unix and windows, given the right > paths. I'm also using the same basic idea as a basis for the moses > thread in a translation GUI. > > Essentially, the MosesCMD class starts up moses in a subprocess, and > subsequent calls to translate() send data in on the subprocess' stdin > and receive translations on its stdout. nb: I'm not using communicate > as that kills the process after reading its output. > > I wrote recently (5th April) that on Windows this script freezes after > five sentences, but on unix it's OK. Turns out on unix -- macOSX at least > -- it freezes after 38 sentences. > > Automatically killing the subprocess and starting a new one after every three > sentences works sometimes, but sometimes (eg when it's powering the > moses thread in a GUI) actually makes things worse. > > The moses decoder I'm using on windows I compiled under cygwin. Both > decoders are using the same irstlm language models. > > Should the moses decoder be able to run indefinitely? Can anyone help me > work out what's going wrong here? > > With thanks and best wishes > > Ivan > > Here's the script: > > #! /usr/bin/env python > > import subprocess, time > > class MosesCMD(object): > def __*init*__(self): > self.cmd_path = '' > self.model_path = '' > self.recaser_model_path = '' > self.proc = None > > def start(self): > cmd = "%s -f %s" % (self.cmd_path, self.model_path) > if self.recaser_model_path: > cmd = "%s | %s -v 0 -f %s -dl 1" \ > % (cmd, self.cmd_path, self.recaser_model_path) > self.proc = subprocess.Popen(cmd, shell=True, > stdin=subprocess.PIPE, > stdout=subprocess.PIPE, > stderr=subprocess.PIPE) > > def translate(self, line): > line = '%s\n' % line.strip() > self.proc.stdin.write(line) > return self.proc.stdout.readline().capitalize() > > def close(self): > self.proc.kill() > > def main(): > mc = MosesCMD() > mc.cmd_path = "/path/to/mosesdecoder/moses-cmd/src/moses" > mc.model_path = "/path/to/model/moses.ini" > mc.recaser_model_path = "/path/to/recase/moses.ini" > mc.start() > > time.sleep(1) > print 'Ready.' > > cy = '*' > while cy: > cy = raw_input('cymraeg> ') > en = mc.translate(cy) > print 'saesneg> %s\n' % en > mc.close() > > if __*name*__ == "__*main*__": > main() > > > > -- > ******************************** > Ivan Uemlianin > > Canolfan Bedwyr > Safle'r Normal Site > Prifysgol Bangor University > BANGOR > Gwynedd > LL57 2PZ > [email protected]http://www.bangor.ac.uk/~cbs007/ > ******************************** > > > _______________________________________________ > Moses-support mailing list > [email protected] > http://mailman.mit.edu/mailman/listinfo/moses-support > >
_______________________________________________ Moses-support mailing list [email protected] http://mailman.mit.edu/mailman/listinfo/moses-support
