Trong R, chúng ta có thể mở một kết nối đường ống bằng cách sử dụng pipe()
và ghi vào nó. Tôi quan sát tình huống sau mà tôi không hiểu lắm. Hãy sử dụng một ống python
ví dụ:làm thế nào để có được đầu ra từ một kết nối đường ống trước khi đóng nó trong 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)
Những gì tôi đã mong là đầu ra từ print()
sẽ được hiển thị ngay lập tức trong R console, nhưng thực tế là sản phẩm chỉ đến sau khi tôi đóng kết nối ống:
> 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
Vì vậy, câu hỏi của tôi là, làm cách nào để có được kết quả trước khi tôi đóng kết nối? Lưu ý rằng nó dường như không thể để nắm bắt đầu ra sử dụng capture.output()
, một trong hai:
> 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)
Nền của câu hỏi này là knitr
engines. Đối với các ngôn ngữ thông dịch như Python, tôi ước tôi có thể mở một "terminal" liên tục để tôi có thể tiếp tục viết mã vào nó và lấy đầu ra từ nó. Tôi không chắc chắn nếu pipe()
là cách chính xác để đi, mặc dù.