以这个简单的python脚本为例:
#!/usr/bin/env python3
# /tmp/xxx.py
import time
for i in range(1000):
print(i)
time.sleep(1)
它不断输出数字。我可以这样从R调用它:
system2("/tmp/xxx.py", stdin=?)
其中stdin可以设置为NULL,"",TRUE或文件名。但我正在寻找的是一种实时处理这些数字的方法。例如,每当从这个python脚本打印一个数字时,我想将数字乘以Pi,然后将其打印到控制台。有没有办法在R?中做到这一点?
答案 0 :(得分:1)
不是专家,但我得到了一些工作。
首先,我使用了以下/tmp/xxx.R
可执行文件Rscript而不是你的python脚本,因为我发现python正在缓冲它的输出(不是一次打印一行),这使得很难测试:
#!/usr/bin/env Rscript
for (i in 1:5) {
cat(i, "\n")
Sys.sleep(1)
}
然后是R代码:
system('mkfifo /tmp/xxx.fifo')
f <- fifo("/tmp/xxx.fifo", 'r')
p <- pipe('/tmp/xxx.R > /tmp/xxx.fifo; echo OVER > /tmp/xxx.fifo', 'w')
while(TRUE) {
line <- readLines(f, n = 1)
if (length(line) > 0) {
if (line == "OVER") break
cat(pi * as.numeric(line), "\n")
}
Sys.sleep(0.1)
}
close(f)
close(p)
其中一些灵感来自于此:https://stackoverflow.com/a/5561188/1201032。
希望它能回答你的问题。