Можно ли с помощью Node из Windows PowerShell генерировать двоичный вывод в stdout?

При запуске Node.js из PowerShell в Windows предполагается, что стандартный вывод должен быть текстовым потоком UTF-16. Это приводит к неожиданным результатам для инструментов, которые отправляют двоичные объекты Buffer на стандартный вывод. Есть ли способ обойти это?

Пример командной строки:

node -e "process.stdout.write(new Buffer('abc'))" >tmp.dat
  • Используя PowerShell, полученный файл tmp.dat теперь имеет длину 12 байтов, а не только 3 байта.

  • Точно такой же пример, запущенный из CMD.EXE, создает ожидаемый 3-байтовый файл.

PS Первоначально я думал, что это вопрос node.js, но теперь ясно, что это проблема PowerShell.

1 ответ

Решение

Лучшим ответом для этого, похоже, является создание cmd.exe и выполнение собственного перенаправления с ним, а не зависимость от модели перенаправления PowerShell. Это немного странно, так как требует помещения перенаправления в кавычки следующим образом:

cmd /c node -e "process.stdout.write(new Buffer('abc'))" '>tmp.dat'

Очень плохо, что PowerShell не распознает, что, поскольку "узел" является встроенной командой, любое перенаправление должно обрабатываться с использованием встроенных механизмов перенаправления.

Другие вопросы по тегам