Rubyでパスワード入力を伴うプログラムの実行(pty+expect)
新城@筑波大学です。こんにちは。
パスワードを毎回キーボードから打ち込むのは面倒で、それを自動
実行したいことはあります。そんなプログラムを Ruby で書くには、
pty と expect を使うと良いのですね。この例題が役に立ちました。
http://snjx.info/diary/snjx/036
多くのプログラムでパスワードは、リダイレクトしてもキーボード
から読み込もうとします。なので、pty が必要になります。あと、
いきなり疑似端末に write してもダメで、"Password:" と打たれた
タイミングを見計らってから write する必要があります。タイミン
グを見るのには、expect が便利。
Ruby の PTY.spawn(cmd) { |r,w,pid| ... } というインタフェース
は、ちょっと馴染みにくいということはあります。理由がよくわか
らなかったけれど、そうか、spawn してから直後にブロックを実行
というのが、馴染めないのか。swawn なら非同期になるはずだからね。
r,w,pid = PTY.spawn(cmd) にすればいいという話はあります。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735