【发布时间】:2015-11-18 12:43:10
【问题描述】:
我有一个 bash 脚本,它调用了 ImageMagick 中的“转换”命令。当我在终端中手动执行该脚本时,它可以正常工作。显然,我已将“转换”命令的路径添加到我的系统路径中。当我尝试使用另一个脚本(用 python 编写)执行它时,我遇到了一个错误,找不到“转换”。这是一个重现问题的简单示例。我在 OSX Maverick 上。
Shell 脚本:convert_svg_to_png.sh
#!/bin/bash
for filename in *.svg; do
convert "$filename" "`basename $filename .svg`.png"
done
Python 脚本:runme.py
>import subprocess
subprocess.call('./convert_svg_to_png.sh')
错误: ./convert_svg_to_png.sh:第 5 行:转换:找不到命令
知道为什么会出现这个错误吗?
编辑:修改 bash 脚本以包含转换函数的整个路径时。弹出这个新错误:
dyld:库未加载:/ImageMagick-6.8.9/lib/libMagickCore-6.Q16.2.dylib 引用自:%FullPath%convert 原因:找不到图片
python调用的shell是/bin/bash。和我的终端一样。
【问题讨论】:
-
在你用来运行python的shell中,当你输入
which convert时会发生什么 -
还有你的
$PATH在那个shell中设置了什么 -
你确定如果你直接从同一个 shell 运行 shell 脚本,它可以工作吗?
-
哪个python给出了这个: /Users/myusername/Desktop/libraries/ImageMagick-6.8.9/bin/convert 。 $PATH 还包括此文件夹: /Users/myusername/Desktop/libraries/ImageMagick-6.8.9/bin/ 。当我手动运行时它可以工作,我也得到了所需的输出。
-
hmmm,很奇怪,根据
subprocessdocs,默认行为是继承当前进程环境...
标签: python bash imagemagick subprocess imagemagick-convert