Simple Inkscape Scriptingを使って作成したスクリプトをコマンドラインから実行したい。
解決策
Procedural generation via Inkscape’s command line · Issue #4 · spakin/SimpInkScrによると、Linux環境では以下により、コマンドラインから実行できる。
env PYTHONPATH=/usr/share/inkscape/extensions:$PYTHONPATH ~/.config/inkscape/extensions/simple_inkscape_scripting/simple_inkscape_scripting.py --py-source=my-script.py --output=output.svg input.svg
私のMacOSの場合、以下により、コマンドラインから実行できる。(1行だと長くなるので、例には環境変数を定義したシェルスクリプトとして記載)1
# run_my_script_by_simpinkscr.sh
INKSCAPE_PYTHON=/Applications/Inkscape.app/Contents/Resources/bin/python3
SIMPINKSCR_SCRIPT=~/Library/Application\ Support/org.inkscape.Inkscape/config/inkscape/extensions/SimpInkScr/simpinkscr/simple_inkscape_scripting.py
export DYLD_LIBRARY_PATH=/Applications/Inkscape.app/Contents/Resources/lib
export PYTHONPATH=/Applications/Inkscape.app/Contents/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages:/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions:.
${INKSCAPE_PYTHON} "${SIMPINKSCR_SCRIPT}" --py-source=my-script.py --output=output.svg input.svg
入力ファイルと出力ファイルを引数で指定可能にすれば、より汎用的になる。
# run_my_script_by_simpinkscr.sh
INKSCAPE_PYTHON=/Applications/Inkscape.app/Contents/Resources/bin/python3
SIMPINKSCR_SCRIPT=~/Library/Application\ Support/org.inkscape.Inkscape/config/inkscape/extensions/SimpInkScr/simpinkscr/simple_inkscape_scripting.py
export DYLD_LIBRARY_PATH=/Applications/Inkscape.app/Contents/Resources/lib
export PYTHONPATH=/Applications/Inkscape.app/Contents/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages:/Applications/Inkscape.app/Contents/Resources/share/inkscape/extensions:.
${INKSCAPE_PYTHON} "${SIMPINKSCR_SCRIPT}" --py-source=my-script.py --output=$2 $1
% sh ./run_my_script_by_simpinkscr.sh input.svg output.svg
参考
- Simple Inkscape Scripting
- Procedural generation via Inkscape’s command line · Issue #4 · spakin/SimpInkScr
-
私の環境では、
DYLD_LIBRARY_PATH
を指定しないとエラーになる。 ↩︎