问题描述
inkscape --with-gui --batch-process --export-filename=- \
--actions="select-all;ObjectToPath" \
/full/path/to/example.svg
但是当我打开Node.js并在子进程中进行相同的调用时,就像这样:
const cp = require("child_process");
var child = cp.spawn(
"/usr/bin/inkscape",[
"--with-gui","--batch-process","--export-filename=-",'--actions="select-all;ObjectToPath"',"/full/path/to/example.svg",],{
cwd: process.cwd(),detached: true,stdio: "inherit",}
);
我收到以下错误:
Unable to find: "select-all
verbs_action: Invalid verb: "select-all
Unable to find: ObjectToPath"
verbs_action: Invalid verb: ObjectToPath"
,文件返回不变(打印到stdout)。任何想法为什么在将Inkscape作为子进程运行但未直接从终端调用它时为何找不到动词?我在使用最新Inkscape(1.0.1 + r73)的ubuntu(20.04)和OSX上遇到了相同的错误。
解决方法
在将cp.spawn
与一系列参数一起使用时,不需要像在shell那样在内部引用"select-all;ObjectToPath"
。 (在外壳程序中,引号阻止外壳程序将命令行标记为两行。由于相同的机制(或缺乏这种机制),试图使用诸如$$
之类的shell变量或诸如{{1}之类的环境变量}在您使用$PATH
时会失败,因为没有任何内容可以解析。)
我能想象
cp.spawn
会帮你的忙。