Я пытаюсь выполнить Inkscape, передавая данные через stdin
. Inkscape поддерживает это только через /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