open3 popen3 двоичные данные - PullRequest
1 голос
/ 21 января 2011

Я пытаюсь отправить двоичные данные через popen3, но получаю сообщение об ошибке.

Команда оболочки, которую я выдаю:

key = File.open('path.key').read
Open3.popen3("openssl pkcs8 -inform DER -outform PEM -passin pass:#{password}") do |stdin,  stdout, stderr|
  stdin.print(key)
  unless (err = stderr.read).empty? then raise err end
  stdout.read
end

где ключ - это двоичный файл. OpenSSL говорит, что ключ недействителен, и я чешу голову.

Теперь, если я выполню команду, когда OpenSSL прочитает ее непосредственно из файловой системы, вместо того, чтобы передавать ее через стандартный ввод, она будет работать правильно

"openssl pkcs8 -in path.key -inform DER -outform PEM -passin pass:#{password}"

Есть ли проблема с кодировкой, о которой я не знаю? Или это просто невозможно. Поскольку я буду получать файлы ключей через веб-сервис, я бы предпочел не сохранять их на диск и не читать их openssl, а вместо этого выполнять весь процесс в памяти.

Спасибо, что уделили время

1 Ответ

0 голосов
/ 21 января 2011

Попробуйте:

Open3.popen3("openssl pkcs8 -inform DER ...") do |stdin,  stdout, stderr|
  stdin.reopen(File.open('path.key', 'rb'))
  unless (err = stderr.read).empty? then raise err end
  stdout.read
end

Вместо того, чтобы читать файл в строку, заново откройте ввод процесса, который будет файлом.Кроме того, просто чтобы быть в безопасности, откройте его в двоичном режиме (обратите внимание на режим rb в вызове File.open)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...