2015-09-21 2 views
0

В сценарии matlab я использую символ escape оболочки «!». для запуска других скриптов python, таких как внешние команды. Все работало без каких-либо проблем, за исключением того, что добавление части кода относительно модуля Wand (мне нужно, чтобы преобразовать images.pdf в images.png и поля урожая). Это невероятно, он не работает с Matlab, но работает очень хорошо, если его запускают из оболочки!Модуль Wand Python, похоже, не работает при вызове в скрипте python с помощью команды для операционной системы в matlab


От переводчика Python, это работает отлично:

:~ $ python 
Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 

>>> from wand.image import Image as wandImage 
>>> with wandImage(filename = '/Users/toto/test.pdf') as img: 
...  img.save(filename = '/Users/toto/test.png') 
... 
>>> 

Из сценария, он работает отлично:

-The скрипт test.py:

$ pwd; ls -l test.py 
/Users/toto 
-rwxrwxrwx 1 toto staff 326 22 sep 10:23 test.py 
$ 
$ more test.py 
#! /usr/bin/python 
# -*- coding: utf-8 -*- # Character encoding, recommended 
## -*- coding: iso-8859-1 -*- # Character encoding, old (Latin-1) 

from wand.image import Image as wandImage 

with wandImage(filename = '/Users/toto/test.pdf') as img: 
    img.save(filename = '/Users/toto/test.png') 

-Контейнер в оболочке:

$ /Users/toto/test.py 
$ 

С Matlab, не работает:

>> ! /Users/toto/test.py 
Traceback (most recent call last): 
    File "/Users/toto/test.py", line 9, in <module> 
    img.save(filename = '/Users/toto/test.png') 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/wand/image.py", line 2719, in save 
    self.raise_exception() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/wand/resource.py", line 222, in raise_exception 
    raise e 
wand.exceptions.WandError: wand contains no images `MagickWand-1' @ error/magick-image.c/MagickWriteImage/13115 
>> 

Arghhh Я чувствую, как лев в клетке. Наверное, я что-то забыл, но не нашел! Любая помощь/предложение будут очень благодарны !!!

Edit 1:

Похоже, что проблема возникает из функции "преобразовать" в ImageMagick.

-В оболочку, отлично работает:

$ /usr/local/bin/convert /Users/toto/test.pdf -crop 510x613+42+64 /Users/toto/test-crop.png 
$ 

-В Matlab, не работает:

>>! /usr/local/bin/convert /Users/toto/test.pdf -crop 510x613+42+64 /Users/toto/test-crop.png 
convert: no images defined `/Users/toto/test-crop.png' @ error/convert.c/ConvertImageCommand/3230. 
>> 

:-(

ответ

0

Я просто нашел решение Все было вызвано потому что пользователь $ PATH не то же самое в Matlab ......

Пример, в доспехах:

$ echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin:/usr/X11/bin:/usr/bin/IRMAGE_python_scripts 
$ 

Но в Matlab:

>> ! echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin 
>> 

Решение определить в Matlab правильный путь (то же самое, чем пользователь $ PATH, в системе):

2 решения:

-Starting из текущей переменной PATH в Matlab:

>> setenv('PATH', [getenv('PATH'),':','/usr/local/bin',':','/opt/X11/bin',':','/usr/texbin',':','/usr/X11/bin',':','/usr/bin/IRMAGE_python_scripts']); 
>> ! echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin:/usr/X11/bin:/usr/bin/IRMAGE_python_scripts 
>> 

-Или определение полностью в PATH:

>> !echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin 
>> setenv('PATH', ['/usr/bin',':','/bin',':','/usr/sbin',':','/sbin',':','/usr/local/bin',':','/opt/X11/bin',':','/usr/texbin',':','/usr/X11/bin',':','/usr/bin/IRMAGE_python_scripts']) 
>> !echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin:/usr/X11/bin:/usr/bin/IRMAGE_python_scripts 

Все работает очень хорошо в настоящее время. Надеясь, что это поможет кому-то, я долго проработал до понимания !!!