我想通过stdin
传递数据来执行Inkscape。 Inkscape仅通过/dev/stdin
支持此功能。基本上,我试图做这样的事情:如何通过Node.js中的child_process.spawn()将长字符串传递给/ dev/stdin?
echo "<sgv>...</svg>" | inkscape -z -f /dev/stdin -A /dev/stdout
我不想写SVG到磁盘。
我尝试了用stdin.write()
,但它不会(的也许是因为/dev/stdin
)工作:
var cmd = spawn("inkscape", ["-z", "-f", "/dev/stdin", "-A", "/dev/stdout"], {encoding: "buffer", stdio: ["pipe", stdoutPipe, "pipe"]});
cmd.stdin.write(svg);
这并不工作,但我写的SVG磁盘:
var cmd = spawn("inkscape", ["-z", "-f", "/dev/stdin", "-A", "/dev/stdout"], {encoding: "buffer", stdio: [fs.openSync('file.svg', "a"), stdoutPipe, "pipe"]});
我试图通过一个流到stdio
,但我只是不断收到TypeError: Incorrect value for stdio stream: [object Object]
任何想法?
附录
的例子使用Inkscape的,但我的问题适用于使用/dev/stdin
任意程序。
顺便说一句,这会为我工作:
var exec = require('child_process').exec;
exec("echo \"<svg>...</svg>\" | inkscape -z -f /dev/stdin -A /dev/stdout | cat", function (error, stdout, stderr) {});
除此之外,我的SVG太长,所以它抛出一个错误:Error: spawn Unknown system errno 7
它不直接支持它,但你可以使用/ dev /标准输入。第二个例子工作正常,并且执行类似“cat file.svg | inkscape -z -f/dev/stdin -A/dev/stdout”的作品。我只是无法弄清楚如何让数据中的节点管道。 – nmrugg