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

Reply via email to