'Invalid Verb' 仅在将 Inkscape 作为子进程调用时出错
'Invalid Verb' error only when Calling Inkscape as a subprocess
当我在命令行中调用以下命令时,它非常有效:
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"
并且文件原样返回(打印到标准输出)。知道为什么当 运行 Inkscape 作为子进程但不直接从终端调用它时找不到动词吗?我使用最新的 Inkscape (1.0.1+r73) 在 ubuntu (20.04) 和 OSX 上遇到同样的错误。
当您将 cp.spawn
与参数数组一起使用时,您不需要像使用 shell 那样在内部引用 "select-all;ObjectToPath"
。 (在 shell 中,引号阻止 shell 将命令行标记为两行。由于相同的机制 - 或缺乏 - 尝试使用 shell 变量,例如 $$
或 $PATH
等环境变量在您使用 cp.spawn
时会失败,因为没有什么可解析的。)
我会想象
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",
},
);
会帮你解决问题的。
当我在命令行中调用以下命令时,它非常有效:
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"
并且文件原样返回(打印到标准输出)。知道为什么当 运行 Inkscape 作为子进程但不直接从终端调用它时找不到动词吗?我使用最新的 Inkscape (1.0.1+r73) 在 ubuntu (20.04) 和 OSX 上遇到同样的错误。
当您将 cp.spawn
与参数数组一起使用时,您不需要像使用 shell 那样在内部引用 "select-all;ObjectToPath"
。 (在 shell 中,引号阻止 shell 将命令行标记为两行。由于相同的机制 - 或缺乏 - 尝试使用 shell 变量,例如 $$
或 $PATH
等环境变量在您使用 cp.spawn
时会失败,因为没有什么可解析的。)
我会想象
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",
},
);
会帮你解决问题的。