0

Matlab スクリプトでは、シェル エスケープ文字 "!" を使用します。外部コマンドのような他の python スクリプトを実行します。モジュール Wand (images.pdf を images.png に変換して余白をトリミングするためにこれが必要です) に関するコードの一部を追加したことを除いて、すべてが問題なく実行されていました。それは信じられないほどです。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')
... 
>>> 

スクリプトから、それは正常に動作しています:

-スクリプト 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
>> 

ああ、私は檻に入れられたライオンのように感じます。私は何かを忘れていると思いますが、見つかりません!! どんな助け/提案も大歓迎です!!!

編集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.
>> 

:-(

4

1 に答える 1

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 (システム内のユーザー $PATH と同じ) を定義することです。

2 つの解決策:

-Matlab の現在の PATH から開始:

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

現在、すべてが非常にうまく機能しています。これが誰かを助けることを願って、私は理解する前に長い間働いてきました!!!

于 2015-09-22T14:44:57.737 に答える