In R, possiamo aprire una connessione di tubo usando pipe()
e scriverci sopra. Ho osservato la seguente situazione che non capisco. Usiamo un tubo python
ad esempio:come ottenere l'output da una connessione pipe prima di chiuderlo in 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)
quello che mi aspettavo era l'uscita dal print()
sarebbe immediatamente mostrato nella console R, ma il fatto è l'uscita viene solo dopo la chiusura del raccordo:
> 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
Quindi la mia domanda è: come posso ottenere l'uscita prima di chiudere la connessione? Si noti che non sembra essere possibile catturare l'output utilizzando capture.output()
, sia:
> 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)
Lo sfondo di questa domanda è il knitr
engines. Per i linguaggi interpretati come Python, mi piacerebbe poter aprire un "terminale" persistente in modo che possa continuare a scrivere codice in esso e ottenerne l'output. Non sono sicuro che se pipe()
sia la strada giusta da percorrere, comunque.