コンソールのコマンドの出力を 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.
}
無駄に。私を正しい方向に導く可能性のある指針はありますか? とても有難い。