#python #matlab #nipype
#питон #matlab #nipype ( тип nipype ) #python #nipype
Вопрос:
Я пытаюсь запустить простой интерфейс matlab на Nipype, как показано ниже, но почему-то он застревает в коде run(). Моя командная строка больше не выполняется. Но это работает отлично, если я копирую mlab.cmdline (matlab -nodesktop -nosplash -singleCompThread -r «addpath(‘/somepath’);pyscript;exit») и передаю его в командную строку.
import nipype.interfaces.matlab as matlab
mlab = matlab.MatlabCommand()
mlab.inputs.script = """ 1 2 """
print mlab.cmdline
res = mlab.run()
print res.runtime
вот прерывание работы клавиатуры ipython :
^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:
Я читал другие subprocess
проблемы на этом сайте, но все они связаны с Popen()
. В моем случае что-то не так с poller.poll()
. Он больше не обрабатывается, когда достигает этой строки.
Комментарии:
1. Как вы думаете, может ли это иметь какое-то отношение к тому, что matlab — это только один поток?
2. Я не думаю, что проблема связана с matlab. На самом деле, тот же код работает на моем Mac. Я думаю, проблема в компьютере, который я использую на сервере. Почему-то это никак не может завершиться
_communicate_with_poll
.
Ответ №1:
Мне не удалось воспроизвести это поведение (оно же «работает для меня!»). Какую версию nipype вы используете?
Комментарии:
1. ‘{‘nibabel_version’: ‘1.3.0’, ‘networkx_version’: ‘1.6’, ‘numpy_version’: ‘1.6.1’, ‘sys_platform’: ‘linux2’, ‘sys_version’: ‘2.7.3 (по умолчанию, сентябрь 26 2013, 20:03:06) n[GCC 4.6.3]’, ‘commit_source’: ‘замена архива’, ‘commit_hash’: ‘162f65d’, ‘pkg_path’: ‘/usr/lib/pymodules/python2.7/nipype’, ‘sys_executable’: ‘/usr/bin/python’, ‘traits_version’: ‘4.0.0’, ‘scipy_version’: ‘ 0.9.0′}’
2. Я только что переустановил nipype сейчас, но снова та же проблема. Что-то не так в
poller.poll()
. Даже этот застревает :python -c "import nipype; nipype.test()"
. Точно в том же месте.3. nipype.__version__ ? можете ли вы запустить что-нибудь с помощью Popen?
4. Пока я не использую sever, но это должна быть последняя версия, потому что я только что переустановил ее сегодня с помощью NeuroDebian. Я могу без каких-либо проблем использовать Popen и Gzip-код ( ссылка ) . Но не может вызвать matlab, mipav или даже простейший код в командной строке. Он всегда получает сбои. Я даже пытался запустить код с учетной записью администратора. Это работает на моем Mac, но не на ubuntu. Я думаю, что что-то не так в base.py например, родительская функция ожидает дочернего процесса, и он застревает.
5. >>> nipype.__version__ ‘0.9.1’