Rubyで外部コマンドを実行し標準入力にデータを渡す

Sambaで利用しているLDAPにまとめてユーザを追加したいことがあった。
ユーザ・パスワードはすでに分かっていているのでCSVに落としている。これを登録したいのだけど、パスワードを求められて結局ひとつづつパスワードを入力しなければならなくなる。
そこで、Rubyから外部コマンドを実行したとき、その外部コマンドの標準入力としてデータを渡すには以下のようにする。

  # 以下の変数には適当な値が入っているとする
  # user     : ユーザ名
  # group    : グループ
  # password : パスワード

  # smbldap-useraddコマンドでユーザを登録
  u = open("|smbldap-useradd -a -g #{group} -H [UX] #{user}")
  u.close

  # 上のコマンドで登録したユーザのパスワードをsmbldap-passwdコマンドを利用して設定する
  pass = open("|smbldap-passwd #{user} > /dev/null",'w')
  pass.puts password # パスワードを指定
  pass.puts password # 確認用のパスワードを指定
  pass.close

今回重要なのは下から4行。
openを実行して返ってきたpassオブジェクトに対してputsメッセージを送るとsmbldap-passwdコマンドの標準入力として扱われる。確認用パスワード入力もあるので2回putsを実行している。