【问题标题】:Interacting with R script via Python subprocess通过 Python 子进程与 R 脚本交互
【发布时间】:2013-04-02 13:30:34
【问题描述】:

我想知道如何打开一个 R 脚本并与之交互(例如,发送字符串、整数等)。尽管我以前没有使用过它,但 subprocess 似乎是一种合理的方法。

到目前为止,我已经

process = subprocess.Popen(['/path/to/Rscript --no-save path/to/script.R'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)

这似乎成功打开了 script.R,但是在我的脚本中,我提示用户输入一个整数,我无法完全弄清楚如何执行此操作。我试过了:

process.communicate(input=1)[0]

但我似乎找错了树。子进程在没有收到此输入的情况下关闭。

编辑:此时 Rpy 可能不是一个好的替代方案,因为此脚本的用户不一定有权访问该模块及其依赖项。

【问题讨论】:

  • process.communicate(input=1) 的结果是什么?
  • 对 - 好问题,我应该指定我看到 no 可见输出是由于 process.communicate(input=1)

标签: python r subprocess


【解决方案1】:

试试 PypeR 吗?

通过管道在python中使用R是一个很棒的接口。

【讨论】:

  • 这真的很有用,谢谢。我能够使用这种方法将命令发送到我的脚本。
【解决方案2】:

EDIT2

那又怎样?

process = subprocess.Popen(['/path/to/Rscript', '--no-save', 'path/to/script.R'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)

EDIT1

您只能通过标准输入和标准输出在进程之间通信字符串。

process.communicate("1\n") 有帮助吗?

【讨论】:

  • 不幸的是,没有。 string 与 int 的区别无关紧要,因为在可以传递输入之前进程关闭。
  • 是的,这似乎有帮助。我现在可以通过 process.stdin.write('source("script.R")') 将字符串传送到子进程,这是向前迈出的一步,谢谢!
猜你喜欢
  • 2023-03-09
  • 2016-12-15
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 2016-05-29
  • 1970-01-01
相关资源
最近更新 更多