作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 R 中,我们可以使用 pipe()
打开一个管道连接。并写信给它。我观察到了以下我不太了解的情况。让我们使用 python
管道例如:
z = pipe('python', open='w+')
cat('x=1\n', file=z)
cat('print(x)\n', file=z)
cat('print(x+2)\n', file=z)
cat('print(x+2\n', file=z)
cat(')\n', file=z)
close(z)
print()
的输出将立即显示在 R 控制台中,但事实是只有在我关闭管道连接后才会出现输出:
> z = pipe('python', open='w+')
>
> cat('x=1\n', file=z)
> cat('print(x)\n', file=z)
> cat('print(x+2)\n', file=z)
> cat('print(x+2\n', file=z)
> cat(')\n', file=z)
>
> close(z)
1
3
3
capture.output()
捕获输出。 , 任何一个:
> z = pipe('python', open='w+')
>
> cat('x=1\n', file=z)
> cat('print(x)\n', file=z)
> cat('print(x+2)\n', file=z)
> cat('print(x+2\n', file=z)
> cat(')\n', file=z)
>
> x = capture.output(close(z))
1
3
3
> x
character(0)
knitr
engines .对于像 Python 这样的解释型语言,我希望我可以打开一个持久的“终端”,这样我就可以继续向其中写入代码并从中获取输出。我不确定
pipe()
不过,这是正确的方法。
最佳答案
Python 注意到输入不是交互式的,并等到连接关闭以解析和执行代码。您可以使用 -i
选项强制它保持交互模式。 (但输出有点困惑)。
z = pipe('python -i', open='w')
cat('x=1\n', file=z)
cat('print(x)\n', file=z)
cat('print(x+2)\n', file=z)
cat('print(x+2\n', file=z)
cat(')\n', file=z)
Sys.sleep(2)
# Python 2.7.4 (default, Apr 19 2013, 18:28:01)
# [GCC 4.7.3] on linux2
# Type "help", "copyright", "credits" or "license" for more information.
# >>> >>> 1
# >>> 3
# >>> ... 3
# >>>
close(z)
stopifnot( capabilities("fifo") )
system('mkfifo /tmp/Rpython.fifo')
output <- fifo('/tmp/Rpython.fifo', 'r')
input <- pipe('python -i > /tmp/Rpython.fifo', 'w')
python_code <- "
x=1
print(x)
print(x+2)
print(x+2
)
"
cat( python_code, file = input )
flush( input )
Sys.sleep(2) # Wait for the results
result <- readLines(output)
result
# [1] "1" "3" "3"
关于r - 如何在R中关闭管道连接之前从管道连接获取输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766391/
我是一名优秀的程序员,十分优秀!