我正在使用node.js中的inkscape CLI,这已经很好地工作了,我听说如果我使用inkscape的--shell参数,性能会更好,所以这个想法是让一个进程保持打开状态,只要我想向孩子发送命令,就可以执行命令。
我尝试使用spawn(这个命令确实打开了一个svg文件):
const child = spawn(`${inkscapePath} "${projectPathSvg}"`, { shell: true })
如果我不使用shell:true,它看起来好像什么都没做,使用shell:true会打开一个inkscape标签,但没有窗口,但无论如何,这并没有做很多事情,当我尝试使用child.send(命令)时,我得到一个错误:
关于如何处理这个问题有什么想法或教程吗?谢谢!
1条答案
按热度按时间gz5pxeao1#
inkscape --shell
与spawn
中的shell
是完全不同的,后者只是意味着您在一个新的shell中运行进程,如bash
。对于inkscape,--shell
意味着您将被置于一个REPL shell中,在那里您可以向正在运行的inkscape进程发送命令。此外,您所指的
child.send
仅在与子进程建立IPC通道时才起作用,而在spawn
中不会发生这种情况,只有在fork
中才起作用,而fork
仅在子进程再次成为nodejs进程时才起作用。看起来你真正想做的是与
inkscape --shell
的开放shell进程通信,从nodejs以编程方式发送命令,为此你需要使用spawn设置的stdin和stdout管道。类似这样的方法可能有效:
不确定inkscape是否有比这更合适的API,但这种方法似乎值得探索。