Dear Jie

Thank you for your reply.

However, using flush() does not help (unless I misunderstand your suggestion):

    def translate(self, line):
        line = '%s\n' % line
        self.proc.stdin.write(line)
        #self.proc.stdin.flush()  #  makes no difference
        tr = self.proc.stdout.readline().capitalize()
        #self.proc.stdout.flush()  #  bad file descriptor
        return tr

Best

Ivan


On 04/05/2010 12:15, Jie Jiang wrote:
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] <mailto:[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]  <mailto:[email protected]>
    http://www.bangor.ac.uk/~cbs007/  <http://www.bangor.ac.uk/%7Ecbs007/>
    ********************************

    _______________________________________________
    Moses-support mailing list
    [email protected] <mailto:[email protected]>
    http://mailman.mit.edu/mailman/listinfo/moses-support




--
********************************
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

Reply via email to