2013-07-21 3 views
8

In R, capture.output() è possibile acquisire l'output su stdout in un'espressione come vettore di carattere, ad es.c'è un modo per catturare lo stdout in Julia come capture.output() in R?

> x = capture.output(print(1:10)) 
> x 
[1] " [1] 1 2 3 4 5 6 7 8 9 10" 

Esiste una funzione equivalente in Julia?

+0

Cosa hai provato? A caso, cambierai OUTPUT_STREAM, STDOUT e STDERR in qualcosa: http://docs.julialang.org/en/release-0.1/stdlib/base/#io - c'è IOBuffer che potrebbe darti un oggetto che puoi scrivere e leggere per ... – Spacedman

+0

... Oppure no: http://comments.gmane.org/gmane.comp.lang.julia.devel/10794 – Spacedman

+0

"OUTPUT_STREAM' è stato rimosso in Julia 0.2; Ho letto la mailing list la scorsa notte, e ho discusso sotto la richiesta pull di Westley (che è stata chiusa poche settimane fa) –

risposta

5

Con Julia 0.2, ora c'è un modo per acquisire l'output standard: è possibile chiamare redirect_stdout per convertire STDOUT in una pipe da cui è possibile leggere.

Questo è principalmente utile per acquisire l'output da librerie C esterne. Come ha detto Stefan, la maggior parte delle funzioni di I/O di Julia accetta un argomento io che consente di stampare su una destinazione arbitraria, ad esempio un buffer di stringa.

+0

Grazie! Questo sembra più vicino a 'capture.output()' in R. –

4

Le funzioni di libreria standard devono tutte accettare un primo argomento opzionale con tipo IO che verrà stampato se fornito, ma altrimenti verrà impostato su STDOUT. In tal caso, è possibile utilizzare sprint(io->f(io,...)) per acquisire ciò che viene stampato su una stringa. Se le funzioni non sono state scritte per la stampa su un determinato oggetto IO, non esiste un modo per reindirizzare l'output.

+0

grazie! la tua ultima frase spiega perché ho fatto questa domanda; più sotto https://github.com/JuliaLang/julia/pull/3044 –

3

Non sei sicuro di cosa stai cercando, ma se stai cercando di portare knitr a julia allora fantastico!

Il pacchetto Gadfly ha trama, il che fa parte di questo.

Partenza https://github.com/dcjones/Gadfly.jl/blob/master/src/weave.jl#L19

e

https://github.com/dcjones/Gadfly.jl/blob/master/src/weave.jl#L423

ho usato in https://github.com/jverzani/Weave.jl a fare i quiz di auto-classificazione da Markdown.

+0

Sto lavorando per portare 'julia' a' knitr'; la via opposta è molto più difficile per me :) Non sapevo che ciò fosse stato fatto in Gadfly. Sembra bello! Quindi la chiave sembra sovrascrivere le funzioni 'print()' e 'println()' in una sandbox. Interessante. Immagino che questo sia quello che voglio. –

+0

Una risposta migliore [potrebbe essere in arrivo] (https://github.com/JuliaLang/julia/pull/3044) nelle versioni future di Julia, e questa risposta è abbastanza soddisfacente al momento. –