Python スクリプトによって実行される Ruby スクリプトがあります。Pythonスクリプト内から、ruby関数の戻り値にアクセスしたい。
想像してみてください。このRuby スクリプト test.rbがあるとします。
class TestClass
def self.test_function(some_var)
if case1
puts "This may take some time"
# something is done here with some_var
puts "Finished"
else
# just do something short with some_var
end
return some_var
end
end
ここで、その関数の戻り値をpython スクリプトに取得したいと思います。印刷された出力は stdout に送られるはずです。
私は次のことを試しました(例1):
from subprocess import call
answer = call(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])
ただし、これにより stdout に出力全体が表示され、answer
単なる終了コードになります。
したがって、私はこれを試しました(例2):
from subprocess import check_output
answer = check_output(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])
これにより、 else の場合(test.rb を参照)の関数の戻り値がすぐに得られます。ただし、case1が true の場合、answer
出力全体が含まれますが、test.rb の実行中は何も出力されません。
ruby 関数の戻り値と stdout に出力されたステートメントを取得する方法はありますか? 理想的には、ソリューションに追加のモジュールをインストールする必要はありません。さらに、ルビコードを変更することはできません。
編集:
これも試しましたが、Rubyスクリプトの実行中にstdoutに出力がありません(例3 ):
import subprocess
process = subprocess.Popen(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"], stdout=subprocess.PIPE)
answer = process.communicate()
また、これは ruby スクリプトで stdout に出力をフラッシュする問題ではないと思います。例 1 では、すぐに出力が得られます。