R スクリプトを開き、別の python スクリプトによって定式化された入力を提供する必要があります。モジュールはこれsubprocess
を行う良い方法のようです。
ただし、いくつかの不可解な結果に遭遇しましたp.stdin
。これが私がこれまでに持っているものです:
from subprocess import Popen, PIPE, STDOUT
p = Popen(['r --no-save'],stdin=PIPE,stdout=PIPE,stderr=PIPE,shell=True)
p.stdin.write("source('myrscript.R')\n")
p.stdin.write('myfirstinput')
このコードを実行すると、 の最初のインスタンスがstdin.write()
期待どおりに実行され (そして R スクリプトが開かれます)、2 行目では何も実行されず、サブプロセス (実際には R スクリプト) がエラーで終了し、サブプロセスが処理されたことを示します。入力が予期されていた場所で入力を受信しなかったため、終了しました。
注意 - 完璧な世界では、R を介して直接対話するだけですが、この特定のスクリプトには、実際には直接入力できない複雑な入力が必要です。また、rpy / rpy2 はオプションではありません。これは、このスクリプトのエンドユーザーが必ずしもそのモジュールまたはその依存関係にアクセスできるとは限らないためです。rscript
もオプションではありません (多くの理由がありますが、主にエンドユーザーの R 構成の可変性のためです)。
最後に、p.communicate
これはオプションではありません。明らかに、書き込み後にプロセスが閉じられ、開いたままにする必要があるためです。
前もって感謝します