著作一覧 |
なるほど。完全に間違って覚えてました。というか、モスクワ駅前もまた青山なのか。であればむしろ思っているということですね。
#そういえば、何も読んでないとか言いながら超マシン誕生とか読んでるし。
再現するパターンができたのでメモ。
追記:間違い。
既知かどうかは知らない。MSDNを普通に読む限り、この動作はおかしい。
元はRuby on HTAだが、VBScript on WScript.exeでも再現したのでそっちの例。
Set w = CreateObject("WScript.Shell") Set e = w.Exec("cmd.exe /c echo a") r = "" Do While e.StdErr.AtEndOfStream r = r & e.StdErr.Read(1) Loop WScript.echo r rem wscript.exeがループする。
マシン速度などにも依存するかも知れないが、Execで実行したコマンドが標準エラーをさわらなかった場合、WshScriptExec#StdErrは、永遠のAtEndOfStreamプロパティが偽のままになる。だが、呼び出し側はどうやってそれを確認すれば良いのか?(追記:常識的にWshScriptExec#status != 0という判断はできるわけだが、なんかなぁ……)
WShScriptExec#StdErrにオブジェクトはアサインされている。おそらく、Read(1)が長さ0の文字列を返したかどうかで判断することは可能だろう。が、ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WEBDEV.v10.en/script56/html/wsMthRead.htm には戻り値の長さが0の場合がEOFだとはどこにも書いてない。サンプルは、AtEndOfStreamプロパティ検証ばかりだ。
それにつけても雷がすごかった。
期待してる人。最初のパイプが詰まるのはしょうがないとは思うが。hold one's breathで固唾を呑んで見守るという意味なのか。あきらめな、っていうことなのかな?
ジェズイットを見習え |
Do While not e.StdErr.AtEndOfStream<br>ですか?
あ、そうか。上のリストはくるくるして当然ですね。