subprocess get stucks at poller.poll()

1k views Asked by At

I'm trying to run a simple matlab interface on Nipype as below, but somehow it gets stuck in run() code. My command line does not proceed anymore . But it works perfectly if I copy mlab.cmdline (matlab -nodesktop -nosplash -singleCompThread -r "addpath('/somepath');pyscript;exit") and past it to the Command Line.

import nipype.interfaces.matlab as matlab

mlab = matlab.MatlabCommand()
mlab.inputs.script = """ 1+2 """

print mlab.cmdline
res = mlab.run()

print res.runtime

here is ipython keyboard interruption :

    ^C---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
    173             else:
    174                 filename = fname
--> 175             __builtin__.execfile(filename, *where)

/new_home/intern2012/yasin/example.py in <module>()
      6
      7 print mlab.cmdline
----> 8 res = mlab.run()
      9
     10 print res.runtime

/usr/lib/pymodules/python2.7/nipype/interfaces/base.pyc in run(self, **inputs)
    944                         version=self.version)
    945         try:
--> 946             runtime = self._run_interface(runtime)
    947             outputs = self.aggregate_outputs(runtime)
    948             runtime.endTime = dt.isoformat(dt.utcnow())

/usr/lib/pymodules/python2.7/nipype/interfaces/matlab.pyc in _run_interface(self, runtime)
    136     def _run_interface(self,runtime):
    137         self.inputs.terminal_output = 'allatonce'
--> 138         runtime = super(MatlabCommand, self)._run_interface(runtime)
    139         try:
    140             # Matlab can leave the terminal in a barbbled state


/usr/lib/pymodules/python2.7/nipype/interfaces/base.pyc in _run_interface(self, runtime, correct_return_codes)
   1378         setattr(runtime, 'dependencies', get_dependencies(executable_name,
   1379                                                           runtime.environ))
-> 1380         runtime = run_command(runtime, output=self.inputs.terminal_output)
   1381         if runtime.returncode is None or \
   1382                         runtime.returncode not in correct_return_codes:

/usr/lib/pymodules/python2.7/nipype/interfaces/base.pyc in run_command(runtime, output, timeout)
   1150         result['merged'] = [r[1] for r in temp]
   1151     if output == 'allatonce':
-> 1152         stdout, stderr = proc.communicate()
   1153         result['stdout'] = stdout.split('\n')
   1154         result['stderr'] = stderr.split('\n')

/usr/lib/python2.7/subprocess.pyc in communicate(self, input)
    752             return (stdout, stderr)
    753
--> 754         return self._communicate(input)
    755
    756

/usr/lib/python2.7/subprocess.pyc in _communicate(self, input)
   1310
   1311             if _has_poll:
-> 1312                 stdout, stderr = self._communicate_with_poll(input)
   1313             else:
   1314                 stdout, stderr = self._communicate_with_select(input)

/usr/lib/python2.7/subprocess.pyc in _communicate_with_poll(self, input)
   1364             while fd2file:
   1365                 try:
-> 1366                     ready = poller.poll()
   1367                 except select.error, e:
   1368                     if e.args[0] == errno.EINTR:

I have read other subprocess problems in this site but they all are related with Popen(). In my case something wrong with poller.poll(). It does not process anymore when it reaches this line.

1

There are 1 answers

6
Chris Gorgolewski On

I failed to replicate this behaviour (aka "works for me!"). Which version of nipype are you using?