仅当将Inkscape作为子过程调用时,“无效动词”错误

问题描述

当我在命令行中调用以下命令时,它就像一个超级按钮:

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

会帮你的忙。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...