'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",
  },
);

会帮你解决问题的。