1

複数のコマンドを発行できるプロセスを生成しようとしています。この生成されたプロセスにいくつかの環境変数を設定するためにbatファイルを呼び出し、他のプロセスなどに影響を与えることなくそれらを活用することを検討しています

POPEN4 になってしまいましたが、これはまさに私がやりたいことをしているように見えますが、stderr.rewind の巻き戻しに関してはエラーが表示されます

以下の popen4 が提供する例を使用して、次の出力を確認します。

C:\>ruby envread.rb
pid        : 4452
stdout     : Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\>echo hello world!
hello world!

C:\>echo ERROR!  1>&2

C:\>
stderr     : ERROR!
C:/Ruby193/lib/ruby/gems/1.9.1/gems/POpen4-0.1.4/lib/popen4.rb:60:in `rewind': invalid argument (Errno::EINVAL)
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/POpen4-0.1.4/lib/popen4.rb:60:n `block in popen4'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/win32-open3-19-0.0.2/lib/win32/open3.rb:6:in `call'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/win32-open3-19-0.0.2/lib/win32/open3.rb:6:in `block in popen4'
    from C:/Ruby193/lib/ruby/1.9.1/open3.rb:208:in `popen_run'
    from C:/Ruby193/lib/ruby/1.9.1/open3.rb:90:in `popen3'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/win32-open3-19-0.0.2/lib/win32/open3.rb:5:in `popen4'
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/POpen4-0.1.4/lib/popen4.rb:48:in `popen4'
    from envread.rb:8:in `<main>'

したがって、ルビー1.9を使用しているため、明確にするためにwind32-open3-19を使用する必要がありました。

1.9 の IO ドキュメントを読むと、巻き戻しはストリームに使用できないと書かれていますか? Aruba のような gem は stderr の巻き戻しを使用していますが...

> rewind → 0 click to toggle source Positions ios to the beginning of
> input, resetting lineno to zero.
> 
> f = File.new("testfile") f.readline   #=> "This is line one\n"
> f.rewind     #=> 0 f.lineno     #=> 0 f.readline   #=> "This is line
> one\n" Note that it cannot be used with streams such as pipes, ttys,
> and sockets.

私は何を間違っていますか?

4

0 に答える 0