pythonスクリプトで実行されるrubyスクリプトがあります。 Pythonスクリプトの中から、私はRuby関数の戻り値にアクセスする必要があります。私は私のPythonスクリプト、印刷出力がすべきにその関数の戻り値を取得したい、今すぐpythonでruby関数の戻り値を取得
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
:
は、私はこのRubyスクリプトtest.rbを持つことになり、想像しますstdoutに行く。
私は、次の(例1)を試してみました:
from subprocess import call
answer = call(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])
はしかし、これは私に標準出力に出力全体を与え、answer
はちょうど終了コードです。
ので、私は(例2)、これを試してみました:
from subprocess import check_output
answer = check_output(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])
これは、ほとんどすぐに(test.rbを参照してください)私他の場合における関数の戻り値を与えます。ただし、case1がtrueの場合、answer
には出力全体が含まれますが、test.rbを実行している間は何も印刷されません。
ruby関数の戻り値とステートメントをstdoutに出力する方法はありますか?理想的には、このソリューションには追加のモジュールをインストールする必要はありません。さらに、私はルビコードを変更することはできません。
編集:
。また、これを試みたが、Rubyスクリプト(例3)を実行しながら、これはまた、標準出力に何も出力を与えない:
import subprocess
process = subprocess.Popen(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"], stdout=subprocess.PIPE)
answer = process.communicate()
私も、これは無問題だと思いますルビスクリプトで出力を標準出力にフラッシュします。例1は私にすぐに出力を与えます。
他のプログラムがRubyで書かれているかどうかは関係ありません。標準出力から出力ストリームを取得するには、popenを使用する必要があります。 – texasbruce