2

コンソールのコマンドの出力を Ruby に変数として保存するのに問題があります。.p12 ファイルの情報を変数として保存しようとしていますp12_info。これは私がこれまでに試したことです。

file = File.read("certificate.p12")
p12 = OpenSSL::PKCS12.new(file, "")
p12_info = `openssl pkcs12 -in #{p} -info -noout -passin pass:""`
print "Info: "
puts p12_info

そして、これは私が得ている出力です:

File name: certificate.p12
MAC Iteration 1
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Certificate bag
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Info:

変数 p_12 を設定しようとすると、コンソール コマンドが実行されているように見えますが、実際には p12_info に保存されません。

または、これを試してみると:

p12_info = `echo "foo`
print "Info: "
puts p12_info

次に、次の出力を取得します。これは、私が目指しているものです。

File name: certificate.p12
Info: foo

なぜこれが起こっているのかについてのアイデアは大歓迎です.

編集:

@tadman - 助けてくれてありがとう。あなたは正しいです、コマンドは実際に追加された出力を行いました> /dev/null. 残念ながら、popen3 の使い方がわかりません。私はこれらすべてに非常に慣れていません..私は試しました:

Open3.popen3(`openssl pkcs12 -in bad_certificate.p12 -info -noout -passin pass:""`) {|stdin, stdout, stderr, wait_thr|
  pid = wait_thr.pid # pid of the started process.
  p12_info = wait_thr.stderr # Process::Status object returned.
}

無駄に。私を正しい方向に導く可能性のある指針はありますか? とても有難い。

4

1 に答える 1