Как передать длинную строку в / dev / stdin через child_process.spawn () в Node.js?
Я пытаюсь выполнить 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