【发布时间】:2013-07-19 22:30:02
【问题描述】:
在 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() 是否正确。
【问题讨论】: