I/O and Network
General I/O
Base.stdout — Constantstdout::IOVariable global que se refiere al flujo de salida estándar.
Base.stderr — Constantstderr::IOVariable global que se refiere al flujo de error estándar.
Base.stdin — Constantstdin::IOVariable global que se refiere al flujo de entrada estándar.
Base.read — Methodread(filename::AbstractString)Lee todo el contenido de un archivo como un Vector{UInt8}.
read(filename::AbstractString, String)Lee todo el contenido de un archivo como una cadena.
read(filename::AbstractString, args...)Abre un archivo y lee su contenido. args se pasa a read: esto es equivalente a open(io->read(io, args...), filename).
Base.write — Methodwrite(filename::AbstractString, content)Escribe la representación binaria canónica de content en un archivo, que se creará si aún no existe o se sobrescribirá si ya existe.
Devuelve el número de bytes escritos en el archivo.
Base.open — Functionopen(f::Function, args...; kwargs...)Aplica la función f al resultado de open(args...; kwargs...) y cierra el descriptor de archivo resultante al finalizar.
Ejemplos
julia> write("myfile.txt", "¡Hola mundo!");
julia> open(io->read(io, String), "myfile.txt")
"¡Hola mundo!"
julia> rm("myfile.txt")open(filename::AbstractString; lock = true, keywords...) -> IOStreamAbre un archivo en un modo especificado por cinco argumentos booleanos de palabra clave:
| Palabra clave | Descripción | Predeterminado |
|---|---|---|
read | abrir para lectura | !write |
write | abrir para escritura | truncate | append |
create | crear si no existe | !read & write | truncate | append |
truncate | truncar a tamaño cero | !read & write |
append | buscar al final | false |
El predeterminado cuando no se pasan palabras clave es abrir archivos solo para lectura. Devuelve un flujo para acceder al archivo abierto.
El argumento de palabra clave lock controla si las operaciones estarán bloqueadas para un acceso seguro en múltiples hilos.
El argumento lock está disponible a partir de Julia 1.5.
open(filename::AbstractString, [mode::AbstractString]; lock = true) -> IOStreamSintaxis alternativa para open, donde se utiliza un especificador de modo basado en cadenas en lugar de los cinco booleanos. Los valores de mode corresponden a los de fopen(3) o Perl open, y son equivalentes a establecer los siguientes grupos booleanos:
| Modo | Descripción | Palabras clave |
|---|---|---|
r | leer | ninguno |
w | escribir, crear, truncar | write = true |
a | escribir, crear, agregar | append = true |
r+ | leer, escribir | read = true, write = true |
w+ | leer, escribir, crear, truncar | truncate = true, read = true |
a+ | leer, escribir, crear, agregar | append = true, read = true |
El argumento de palabra clave lock controla si las operaciones estarán bloqueadas para un acceso seguro en múltiples hilos.
Ejemplos
julia> io = open("myfile.txt", "w");
julia> write(io, "¡Hola mundo!");
julia> close(io);
julia> io = open("myfile.txt", "r");
julia> read(io, String)
"¡Hola mundo!"
julia> write(io, "Este archivo es solo de lectura")
ERROR: ArgumentError: write failed, IOStream is not writeable
[...]
julia> close(io)
julia> io = open("myfile.txt", "a");
julia> write(io, "Este flujo no es solo de lectura")
28
julia> close(io)
julia> rm("myfile.txt")El argumento lock está disponible a partir de Julia 1.5.
open(fd::OS_HANDLE) -> IOToma un descriptor de archivo en bruto, envuélvelo en un tipo IO consciente de Julia y toma posesión del manejador fd. Llama a open(Libc.dup(fd)) para evitar la captura de propiedad del manejador original.
No llames a esto en un manejador que ya está en posesión de otra parte del sistema.
open(command, mode::AbstractString, stdio=devnull)Ejecuta command de manera asíncrona. Al igual que open(command, stdio; read, write), excepto que se especifican las banderas de lectura y escritura a través de una cadena de modo en lugar de argumentos de palabra clave. Las cadenas de modo posibles son:
| Modo | Descripción | Palabras clave |
|---|---|---|
r | leer | ninguna |
w | escribir | write = true |
r+ | leer, escribir | read = true, write = true |
w+ | leer, escribir | read = true, write = true |
open(command, stdio=devnull; write::Bool = false, read::Bool = !write)Comienza a ejecutar command de manera asíncrona y devuelve un objeto process::IO. Si read es verdadero, entonces las lecturas del proceso provienen de la salida estándar del proceso y stdio especifica opcionalmente el flujo de entrada estándar del proceso. Si write es verdadero, entonces las escrituras van al flujo de entrada estándar del proceso y stdio especifica opcionalmente el flujo de salida estándar del proceso. El flujo de error estándar del proceso está conectado al stderr global actual.
open(f::Function, command, args...; kwargs...)Similar a open(command, args...; kwargs...), pero llama a f(stream) en el flujo de proceso resultante, luego cierra el flujo de entrada y espera a que el proceso se complete. Devuelve el valor devuelto por f en caso de éxito. Lanza un error si el proceso falla, o si el proceso intenta imprimir algo en stdout.
Base.IOStream — TypeIOStreamUn flujo de IO con búfer que envuelve un descriptor de archivo del sistema operativo. Principalmente utilizado para representar archivos devueltos por open.
Base.IOBuffer — TypeIOBuffer([data::AbstractVector{UInt8}]; keywords...) -> IOBufferCrea un flujo de I/O en memoria, que puede operar opcionalmente sobre un arreglo preexistente.
Puede tomar argumentos de palabra clave opcionales:
read,write,append: restringe las operaciones al búfer; consultaopenpara más detalles.truncate: trunca el tamaño del búfer a cero.maxsize: especifica un tamaño más allá del cual el búfer no puede crecer.sizehint: sugiere una capacidad del búfer (datadebe implementarsizehint!(data, size)).
Cuando data no se proporciona, el búfer será tanto legible como escribible por defecto.
Ejemplos
julia> io = IOBuffer();
julia> write(io, "JuliaLang is a GitHub organization.", " It has many members.")
56
julia> String(take!(io))
"JuliaLang is a GitHub organization. It has many members."
julia> io = IOBuffer(b"JuliaLang is a GitHub organization.")
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=35, maxsize=Inf, ptr=1, mark=-1)
julia> read(io, String)
"JuliaLang is a GitHub organization."
julia> write(io, "This isn't writable.")
ERROR: ArgumentError: ensureroom failed, IOBuffer is not writeable
julia> io = IOBuffer(UInt8[], read=true, write=true, maxsize=34)
IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true, append=false, size=0, maxsize=34, ptr=1, mark=-1)
julia> write(io, "JuliaLang is a GitHub organization.")
34
julia> String(take!(io))
"JuliaLang is a GitHub organization"
julia> length(read(IOBuffer(b"data", read=true, truncate=false)))
4
julia> length(read(IOBuffer(b"data", read=true, truncate=true)))
0IOBuffer(string::String)Crea un IOBuffer de solo lectura sobre los datos subyacentes de la cadena dada.
Ejemplos
julia> io = IOBuffer("Haho");
julia> String(take!(io))
"Haho"
julia> String(take!(io))
"Haho"Base.take! — Methodtake!(b::IOBuffer)Obtiene el contenido de un IOBuffer como un arreglo. Después, el IOBuffer se restablece a su estado inicial.
Ejemplos
julia> io = IOBuffer();
julia> write(io, "JuliaLang is a GitHub organization.", " It has many members.")
56
julia> String(take!(io))
"JuliaLang is a GitHub organization. It has many members."Base.Pipe — TypePipe()Construye un objeto Pipe no inicializado, especialmente para la comunicación de IO entre múltiples procesos.
El extremo apropiado del pipe se inicializará automáticamente si el objeto se utiliza en la creación de procesos. Esto puede ser útil para obtener fácilmente referencias en tuberías de procesos, por ejemplo:
julia> err = Pipe()
# Después de esto, `err` estará inicializado y podrás leer `foo`'s
# stderr desde el pipe `err`, o pasar `err` a otras tuberías.
julia> run(pipeline(pipeline(`foo`, stderr=err), `cat`), wait=false)
# Ahora destruye la mitad de escritura del pipe, para que la mitad de lectura obtenga EOF
julia> closewrite(err)
julia> read(err, String)
"stderr messages"Consulta también Base.link_pipe!.
Base.link_pipe! — Functionlink_pipe!(pipe; reader_supports_async=false, writer_supports_async=false)Inicializa pipe y vincula el extremo in al extremo out. Los argumentos de palabra clave reader_supports_async/writer_supports_async corresponden a OVERLAPPED en Windows y O_NONBLOCK en sistemas POSIX. Deben ser true a menos que sean utilizados por un programa externo (por ejemplo, la salida de un comando ejecutado con run).
Base.fdio — Functionfdio([name::AbstractString, ]fd::Integer[, own::Bool=false]) -> IOStreamCrea un objeto IOStream a partir de un descriptor de archivo entero. Si own es true, cerrar este objeto cerrará el descriptor subyacente. Por defecto, un IOStream se cierra cuando es recolectado por el recolector de basura. name te permite asociar el descriptor con un archivo nombrado.
Base.flush — Functionflush(stream)Confirma todas las escrituras actualmente en búfer al flujo dado.
Base.close — Functionclose(stream)Cierra un flujo de E/S. Realiza un flush primero.
Base.closewrite — Functionclosewrite(stream)Cierra la mitad de escritura de un flujo de E/S de doble dirección. Realiza un flush primero. Notifica al otro extremo que no se escribirá más datos en el archivo subyacente. Esto no es compatible con todos los tipos de E/S.
Si se implementa, closewrite provoca que las llamadas subsiguientes a read o eof que bloquearían, en su lugar lancen EOF o devuelvan verdadero, respectivamente. Si el flujo ya está cerrado, esto es idempotente.
Ejemplos
julia> io = Base.BufferStream(); # esto nunca bloquea, así que podemos leer y escribir en la misma Tarea
julia> write(io, "request");
julia> # llamar a `read(io)` aquí bloquearía para siempre
julia> closewrite(io);
julia> read(io, String)
"request"Base.write — Functionwrite(io::IO, x)Escribe la representación binaria canónica de un valor en el flujo de E/S o archivo dado. Devuelve el número de bytes escritos en el flujo. Consulta también print para escribir una representación de texto (con una codificación que puede depender de io).
El orden de bytes del valor escrito depende del orden de bytes del sistema anfitrión. Convierte a/desde un orden de bytes fijo al escribir/leer (por ejemplo, usando htol y ltoh) para obtener resultados que sean consistentes en todas las plataformas.
Puedes escribir múltiples valores con la misma llamada a write. Es decir, lo siguiente es equivalente:
write(io, x, y...)
write(io, x) + write(io, y...)Ejemplos
Serialización consistente:
julia> fname = tempname(); # nombre de archivo temporal aleatorio
julia> open(fname,"w") do f
# Asegúrate de que escribimos un entero de 64 bits en orden de bytes little-endian
write(f,htol(Int64(42)))
end
8
julia> open(fname,"r") do f
# Convierte de nuevo al orden de bytes del anfitrión y al tipo de entero del anfitrión
Int(ltoh(read(f,Int64)))
end
42Fusionando llamadas a write:
julia> io = IOBuffer();
julia> write(io, "JuliaLang es una organización de GitHub.", " Tiene muchos miembros.")
56
julia> String(take!(io))
"JuliaLang es una organización de GitHub. Tiene muchos miembros."
julia> write(io, "A veces esos miembros") + write(io, " escriben documentación.")
44
julia> String(take!(io))
"A veces esos miembros escriben documentación."Los tipos de datos simples definidos por el usuario sin métodos write pueden escribirse cuando están envueltos en un Ref:
julia> struct MyStruct; x::Float64; end
julia> io = IOBuffer()
IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true, append=false, size=0, maxsize=Inf, ptr=1, mark=-1)
julia> write(io, Ref(MyStruct(42.0)))
8
julia> seekstart(io); read!(io, Ref(MyStruct(NaN)))
Base.RefValue{MyStruct}(MyStruct(42.0))Base.read — Functionread(io::IO, T)Lee un solo valor del tipo T desde io, en representación binaria canónica.
Ten en cuenta que Julia no convierte el orden de los bytes por ti. Usa ntoh o ltoh para este propósito.
read(io::IO, String)Lee la totalidad de io, como un String (ver también readchomp).
Ejemplos
julia> io = IOBuffer("JuliaLang is a GitHub organization");
julia> read(io, Char)
'J': ASCII/Unicode U+004A (categoría Lu: Letra, mayúscula)
julia> io = IOBuffer("JuliaLang is a GitHub organization");
julia> read(io, String)
"JuliaLang is a GitHub organization"read(filename::AbstractString)Lee todo el contenido de un archivo como un Vector{UInt8}.
read(filename::AbstractString, String)Lee todo el contenido de un archivo como una cadena.
read(filename::AbstractString, args...)Abre un archivo y lee su contenido. args se pasa a read: esto es equivalente a open(io->read(io, args...), filename).
read(s::IO, nb=typemax(Int))Lee como máximo nb bytes de s, devolviendo un Vector{UInt8} de los bytes leídos.
read(s::IOStream, nb::Integer; all=true)Lee como máximo nb bytes de s, devolviendo un Vector{UInt8} de los bytes leídos.
Si all es true (el valor predeterminado), esta función bloqueará repetidamente intentando leer todos los bytes solicitados, hasta que ocurra un error o se alcance el final del archivo. Si all es false, se realiza como máximo una llamada a read, y la cantidad de datos devueltos depende del dispositivo. Ten en cuenta que no todos los tipos de flujo admiten la opción all.
read(command::Cmd)Ejecuta command y devuelve la salida resultante como un arreglo de bytes.
read(command::Cmd, String)Ejecuta command y devuelve la salida resultante como un String.
Base.read! — Functionread!(stream::IO, array::AbstractArray)
read!(filename::AbstractString, array::AbstractArray)Lee datos binarios de un flujo de E/S o archivo, llenando array.
Base.readbytes! — Functionreadbytes!(stream::IO, b::AbstractVector{UInt8}, nb=length(b))Lee como máximo nb bytes de stream en b, devolviendo el número de bytes leídos. El tamaño de b se incrementará si es necesario (es decir, si nb es mayor que length(b) y se pudieron leer suficientes bytes), pero nunca se reducirá.
readbytes!(stream::IOStream, b::AbstractVector{UInt8}, nb=length(b); all::Bool=true)Lee como máximo nb bytes desde stream en b, devolviendo el número de bytes leídos. El tamaño de b se incrementará si es necesario (es decir, si nb es mayor que length(b) y se pudieron leer suficientes bytes), pero nunca se reducirá.
Si all es true (el valor predeterminado), esta función bloqueará repetidamente intentando leer todos los bytes solicitados, hasta que ocurra un error o se alcance el final del archivo. Si all es false, se realiza como máximo una llamada a read, y la cantidad de datos devueltos depende del dispositivo. Tenga en cuenta que no todos los tipos de flujo admiten la opción all.
Base.unsafe_read — Functionunsafe_read(io::IO, ref, nbytes::UInt)Copia nbytes del objeto de flujo IO en ref (convertido a un puntero).
Se recomienda que los subtipos T<:IO sobrescriban la siguiente firma de método para proporcionar implementaciones más eficientes: unsafe_read(s::T, p::Ptr{UInt8}, n::UInt)
Base.unsafe_write — Functionunsafe_write(io::IO, ref, nbytes::UInt)Copia nbytes de ref (convertido a un puntero) en el objeto IO.
Se recomienda que los subtipos T<:IO sobrescriban la siguiente firma de método para proporcionar implementaciones más eficientes: unsafe_write(s::T, p::Ptr{UInt8}, n::UInt)
Base.readeach — Functionreadeach(io::IO, T)Devuelve un objeto iterable que produce read(io, T).
Véase también skipchars, eachline, readuntil.
readeach requiere Julia 1.6 o posterior.
Ejemplos
julia> io = IOBuffer("JuliaLang is a GitHub organization.\n It has many members.\n");
julia> for c in readeach(io, Char)
c == '\n' && break
print(c)
end
JuliaLang is a GitHub organization.Base.peek — Functionpeek(stream[, T=UInt8])Lee y devuelve un valor del tipo T de un flujo sin avanzar la posición actual en el flujo. Ver también startswith(stream, char_or_string).
Ejemplos
julia> b = IOBuffer("julia");
julia> peek(b)
0x6a
julia> position(b)
0
julia> peek(b, Char)
'j': ASCII/Unicode U+006A (categoría Ll: Letra, minúscula)El método que acepta un tipo requiere Julia 1.5 o posterior.
Base.position — Functionposition(l::Lexer)Devuelve la posición actual.
posición(es)Obtén la posición actual de un flujo.
Ejemplos
julia> io = IOBuffer("JuliaLang es una organización de GitHub.");
julia> seek(io, 5);
julia> position(io)
5
julia> skip(io, 10);
julia> position(io)
15
julia> seekend(io);
julia> position(io)
35Base.seek — Functionseek(s, pos)Buscar un flujo en la posición dada.
Ejemplos
julia> io = IOBuffer("JuliaLang es una organización de GitHub.");
julia> seek(io, 5);
julia> read(io, Char)
'L': ASCII/Unicode U+004C (categoría Lu: Letra, mayúscula)Base.seekstart — Functionseekstart(s)Busca un flujo hasta su comienzo.
Ejemplos
julia> io = IOBuffer("JuliaLang is a GitHub organization.");
julia> seek(io, 5);
julia> read(io, Char)
'L': ASCII/Unicode U+004C (categoría Lu: Letra, mayúscula)
julia> seekstart(io);
julia> read(io, Char)
'J': ASCII/Unicode U+004A (categoría Lu: Letra, mayúscula)Base.seekend — Functionseekend(s)Buscar un flujo hasta su final.
Base.skip — Functionskip(s, offset)Buscar en un flujo relativo a la posición actual.
Ejemplos
julia> io = IOBuffer("JuliaLang es una organización de GitHub.");
julia> seek(io, 5);
julia> skip(io, 10);
julia> read(io, Char)
'G': ASCII/Unicode U+0047 (categoría Lu: Letra, mayúscula)Base.mark — Functionmark(s::IO)Agrega una marca en la posición actual del flujo s. Devuelve la posición marcada.
Base.unmark — Functionunmark(s::IO)Elimina una marca del flujo s. Devuelve true si el flujo estaba marcado, false en caso contrario.
Base.reset — Methodreset(s::IO)Restablece un flujo s a una posición marcada previamente y elimina la marca. Devuelve la posición marcada previamente. Lanza un error si el flujo no está marcado.
Base.ismarked — FunctionBase.eof — Functioneof(stream) -> BoolPrueba si un flujo de E/S está al final del archivo. Si el flujo aún no se ha agotado, esta función bloqueará para esperar más datos si es necesario, y luego devolverá false. Por lo tanto, siempre es seguro leer un byte después de ver que eof devuelve false. eof devolverá false mientras haya datos en búfer disponibles, incluso si el extremo remoto de una conexión está cerrado.
Ejemplos
julia> b = IOBuffer("my buffer");
julia> eof(b)
false
julia> seekend(b);
julia> eof(b)
trueBase.isreadonly — Functionisreadonly(io) -> BoolDetermina si un flujo es de solo lectura.
Ejemplos
julia> io = IOBuffer("JuliaLang es una organización de GitHub");
julia> isreadonly(io)
true
julia> io = IOBuffer();
julia> isreadonly(io)
falseBase.iswritable — Functioniswritable(path::String)Devuelve true si los permisos de acceso para la ruta dada permiten la escritura por parte del usuario actual.
Este permiso puede cambiar antes de que el usuario llame a open, por lo que se recomienda simplemente llamar a open solo y manejar el error si falla, en lugar de llamar a iswritable primero.
Actualmente, esta función no interroga correctamente los ACL del sistema de archivos en Windows, por lo que puede devolver resultados incorrectos.
Esta función requiere al menos Julia 1.11.
Véase también ispath, isexecutable, isreadable.
iswritable(io) -> BoolDevuelve false si el objeto IO especificado no es escribible.
Ejemplos
julia> open("myfile.txt", "w") do io
print(io, "¡Hola mundo!");
iswritable(io)
end
true
julia> open("myfile.txt", "r") do io
iswritable(io)
end
false
julia> rm("myfile.txt")Base.isreadable — Functionisreadable(path::String)Devuelve true si los permisos de acceso para la ruta dada permiten la lectura por parte del usuario actual.
Este permiso puede cambiar antes de que el usuario llame a open, por lo que se recomienda simplemente llamar a open solo y manejar el error si eso falla, en lugar de llamar a isreadable primero.
Actualmente, esta función no interroga correctamente los ACL del sistema de archivos en Windows, por lo que puede devolver resultados incorrectos.
Esta función requiere al menos Julia 1.11.
Véase también ispath, isexecutable, iswritable. ```
isreadable(io) -> BoolDevuelve false si el objeto IO especificado no es legible.
Ejemplos
julia> open("myfile.txt", "w") do io
print(io, "¡Hola mundo!");
isreadable(io)
end
false
julia> open("myfile.txt", "r") do io
isreadable(io)
end
true
julia> rm("myfile.txt")Base.isexecutable — Functionisexecutable(path::String)Devuelve true si el path dado tiene permisos de ejecución.
Este permiso puede cambiar antes de que el usuario ejecute path, por lo que se recomienda ejecutar el archivo y manejar el error si eso falla, en lugar de llamar a isexecutable primero.
Antes de Julia 1.6, esto no interrogaba correctamente los ACL del sistema de archivos en Windows, por lo que devolvería true para cualquier archivo. A partir de Julia 1.6, determina correctamente si el archivo está marcado como ejecutable o no.
Véase también ispath, isreadable, iswritable.
Base.isopen — Functionisopen(object) -> BoolDetermina si un objeto - como un flujo o un temporizador - no está cerrado aún. Una vez que un objeto está cerrado, nunca producirá un nuevo evento. Sin embargo, dado que un flujo cerrado puede aún tener datos para leer en su búfer, utiliza eof para verificar la capacidad de leer datos. Usa el paquete FileWatching para ser notificado cuando un flujo pueda ser escribible o legible.
Ejemplos
julia> io = open("my_file.txt", "w+");
julia> isopen(io)
true
julia> close(io)
julia> isopen(io)
falseBase.fd — Functionfd(stream)Devuelve el descriptor de archivo que respalda el flujo o archivo. Ten en cuenta que esta función solo se aplica a File y IOStream síncronos, no a ninguno de los flujos asíncronos.
Base.redirect_stdio — Functionredirect_stdio(;stdin=stdin, stderr=stderr, stdout=stdout)Redirigir un subconjunto de los flujos stdin, stderr, stdout. Cada argumento debe ser un IOStream, TTY, Pipe, socket o devnull.
redirect_stdio requiere Julia 1.7 o posterior.
redirect_stdio(f; stdin=nothing, stderr=nothing, stdout=nothing)Redirige un subconjunto de los flujos stdin, stderr, stdout, llama a f() y restaura cada flujo.
Los valores posibles para cada flujo son:
nothingindicando que el flujo no debe ser redirigido.path::AbstractStringredirigiendo el flujo al archivo enpath.iounIOStream,TTY,Pipe, socket, odevnull.
Ejemplos
julia> redirect_stdio(stdout="stdout.txt", stderr="stderr.txt") do
print("hello stdout")
print(stderr, "hello stderr")
end
julia> read("stdout.txt", String)
"hello stdout"
julia> read("stderr.txt", String)
"hello stderr"Casos extremos
Es posible pasar el mismo argumento a stdout y stderr:
julia> redirect_stdio(stdout="log.txt", stderr="log.txt", stdin=devnull) do
...
endSin embargo, no se admite pasar dos descriptores distintos del mismo archivo.
julia> io1 = open("same/path", "w")
julia> io2 = open("same/path", "w")
julia> redirect_stdio(f, stdout=io1, stderr=io2) # no soportadoAdemás, el argumento stdin no puede ser el mismo descriptor que stdout o stderr.
julia> io = open(...)
julia> redirect_stdio(f, stdout=io, stdin=io) # no soportadoredirect_stdio requiere Julia 1.7 o posterior.
Base.redirect_stdout — Functionredirect_stdout([stream]) -> streamCrea un pipe al que se redirigirá toda la salida de nivel C y Julia stdout. Devuelve un flujo que representa los extremos del pipe. Los datos escritos en stdout ahora se pueden leer desde el extremo rd del pipe.
stream debe ser un objeto compatible, como un IOStream, TTY, Pipe, socket o devnull.
Consulta también redirect_stdio.
Base.redirect_stdout — Methodredirect_stdout(f::Function, stream)Ejecuta la función f mientras rediriges stdout a stream. Al finalizar, stdout se restaura a su configuración anterior.
Base.redirect_stderr — Functionredirect_stderr([stream]) -> streamComo redirect_stdout, pero para stderr.
stream debe ser un objeto compatible, como un IOStream, TTY, Pipe, socket o devnull.
Véase también redirect_stdio.
Base.redirect_stderr — Methodredirect_stderr(f::Function, stream)Ejecuta la función f mientras redirige stderr a stream. Al finalizar, stderr se restaura a su configuración anterior.
Base.redirect_stdin — Functionredirect_stdin([stream]) -> streamComo redirect_stdout, pero para stdin. Tenga en cuenta que la dirección del flujo está invertida.
stream debe ser un objeto compatible, como un IOStream, TTY, Pipe, socket o devnull.
Véase también redirect_stdio.
Base.redirect_stdin — Methodredirect_stdin(f::Function, stream)Ejecuta la función f mientras redirige stdin a stream. Al finalizar, stdin se restaura a su configuración anterior.
Base.readchomp — Functionreadchomp(x)Lee la totalidad de x como una cadena y elimina un solo salto de línea final si existe. Equivalente a chomp(read(x, String)).
Ejemplos
julia> write("my_file.txt", "JuliaLang es una organización de GitHub.\nTiene muchos miembros.\n");
julia> readchomp("my_file.txt")
"JuliaLang es una organización de GitHub.\nTiene muchos miembros."
julia> rm("my_file.txt");Base.truncate — Functiontruncate(file, n)Redimensiona el archivo o búfer dado por el primer argumento a exactamente n bytes, llenando el espacio previamente no asignado con '\0' si el archivo o búfer se expande.
Ejemplos
julia> io = IOBuffer();
julia> write(io, "JuliaLang is a GitHub organization.")
35
julia> truncate(io, 15)
IOBuffer(data=UInt8[...], readable=true, writable=true, seekable=true, append=false, size=15, maxsize=Inf, ptr=16, mark=-1)
julia> String(take!(io))
"JuliaLang is a "
julia> io = IOBuffer();
julia> write(io, "JuliaLang is a GitHub organization.");
julia> truncate(io, 40);
julia> String(take!(io))
"JuliaLang is a GitHub organization.\0\0\0\0\0"Base.skipchars — Functionskipchars(predicate, io::IO; linecomment=nothing)Avanza el flujo io de tal manera que el siguiente carácter que se lea será el primero restante para el cual predicate devuelve false. Si se especifica el argumento clave linecomment, se ignoran todos los caracteres desde ese carácter hasta el inicio de la siguiente línea.
Ejemplos
julia> buf = IOBuffer(" text")
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=8, maxsize=Inf, ptr=1, mark=-1)
julia> skipchars(isspace, buf)
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=8, maxsize=Inf, ptr=5, mark=-1)
julia> String(readavailable(buf))
"text"Base.countlines — Functioncountlines(io::IO; eol::AbstractChar = '\n')
countlines(filename::AbstractString; eol::AbstractChar = '\n')Lee io hasta el final del flujo/archivo y cuenta el número de líneas. Para especificar un archivo, pasa el nombre del archivo como el primer argumento. Se admiten marcadores EOL distintos de '\n' pasándolos como el segundo argumento. La última línea no vacía de io se cuenta incluso si no termina con el EOL, coincidiendo con la longitud devuelta por eachline y readlines.
Para contar líneas de un String, se puede usar countlines(IOBuffer(str)).
Ejemplos
julia> io = IOBuffer("JuliaLang es una organización de GitHub.\n");
julia> countlines(io)
1
julia> io = IOBuffer("JuliaLang es una organización de GitHub.");
julia> countlines(io)
1
julia> eof(io) # contar líneas mueve el puntero del archivo
true
julia> io = IOBuffer("JuliaLang es una organización de GitHub.");
julia> countlines(io, eol = '.')
1julia> write("mi_archivo.txt", "JuliaLang es una organización de GitHub.\n")
36
julia> countlines("mi_archivo.txt")
1
julia> countlines("mi_archivo.txt", eol = 'n')
4
julia> rm("mi_archivo.txt")
Base.PipeBuffer — FunctionPipeBuffer(data::AbstractVector{UInt8}=UInt8[]; maxsize::Integer = typemax(Int))Un IOBuffer que permite la lectura y realiza escrituras mediante la adición. No se admite la búsqueda ni la truncación. Consulte IOBuffer para los constructores disponibles. Si se proporciona data, crea un PipeBuffer para operar en un vector de datos, especificando opcionalmente un tamaño más allá del cual el Array subyacente no puede crecer.
Base.readavailable — Functionreadavailable(stream)Lee los datos en búfer disponibles de un flujo. La entrada/salida real se realiza solo si no se ha almacenado en búfer ningún dato. El resultado es un Vector{UInt8}.
La cantidad de datos devueltos depende de la implementación; por ejemplo, puede depender de la elección interna del tamaño del búfer. Otras funciones como read deberían usarse generalmente en su lugar.
Base.IOContext — TypeIOContextIOContext proporciona un mecanismo para pasar configuraciones de salida entre los métodos show.
En resumen, es un diccionario inmutable que es una subclase de IO. Soporta operaciones estándar de diccionario como getindex, y también puede ser utilizado como un flujo de I/O.
Base.IOContext — MethodIOContext(io::IO, KV::Pair...)Crea un IOContext que envuelve un flujo dado, añadiendo los pares key=>value especificados a las propiedades de ese flujo (ten en cuenta que io puede ser en sí mismo un IOContext).
- usa
(key => value) in iopara ver si esta combinación particular está en el conjunto de propiedades - usa
get(io, key, default)para recuperar el valor más reciente para una clave particular
Las siguientes propiedades son de uso común:
:compact: Booleano que especifica que los valores deben imprimirse de manera más compacta, por ejemplo, que los números deben imprimirse con menos dígitos. Esto se establece al imprimir elementos de un array. La salida:compactno debe contener saltos de línea.:limit: Booleano que especifica que los contenedores deben ser truncados, por ejemplo, mostrando…en lugar de la mayoría de los elementos.:displaysize: UnTuple{Int,Int}que da el tamaño en filas y columnas a utilizar para la salida de texto. Esto se puede usar para anular el tamaño de visualización para funciones llamadas, pero para obtener el tamaño de la pantalla usa la funcióndisplaysize.:typeinfo: unTypeque caracteriza la información ya impresa sobre el tipo del objeto que está a punto de ser mostrado. Esto es principalmente útil al mostrar una colección de objetos del mismo tipo, para que se pueda evitar información de tipo redundante (por ejemplo,[Float16(0)]puede mostrarse como "Float16[0.0]" en lugar de "Float16[Float16(0.0)]": al mostrar los elementos del array, la propiedad:typeinfose establecerá enFloat16).:color: Booleano que especifica si se admiten/se esperan códigos de color/escape ANSI. Por defecto, esto se determina por siioes un terminal compatible y por cualquier bandera de línea de comandos--colorcuando se lanzójulia.
Ejemplos
julia> io = IOBuffer();
julia> printstyled(IOContext(io, :color => true), "string", color=:red)
julia> String(take!(io))
"\e[31mstring\e[39m"
julia> printstyled(io, "string", color=:red)
julia> String(take!(io))
"string"julia> print(IOContext(stdout, :compact => false), 1.12341234)
1.12341234
julia> print(IOContext(stdout, :compact => true), 1.12341234)
1.12341julia> function f(io::IO)
if get(io, :short, false)
print(io, "short")
else
print(io, "loooooong")
end
end
f (generic function with 1 method)
julia> f(stdout)
loooooong
julia> f(IOContext(stdout, :short => true))
shortBase.IOContext — MethodIOContext(io::IO, context::IOContext)Crea un IOContext que envuelve un IO alternativo pero hereda las propiedades de context.
Text I/O
Base.show — Methodshow([io::IO = stdout], x)Escribe una representación de texto de un valor x en el flujo de salida io. Los nuevos tipos T deben sobrecargar show(io::IO, x::T). La representación utilizada por show generalmente incluye formato específico de Julia e información de tipo, y debe ser código Julia que se pueda analizar cuando sea posible.
repr devuelve la salida de show como una cadena.
Para una salida de texto más detallada y legible para humanos para objetos del tipo T, define show(io::IO, ::MIME"text/plain", ::T) además. Se recomienda verificar la clave :compact del IOContext (a menudo verificada como get(io, :compact, false)::Bool) de io en tales métodos, ya que algunos contenedores muestran sus elementos llamando a este método con :compact => true.
Consulta también print, que escribe representaciones no decoradas.
Ejemplos
julia> show("Hello World!")
"Hello World!"
julia> print("Hello World!")
Hello World!Base.summary — Functionsummary(io::IO, x)
str = summary(x)Imprime en un flujo io, o devuelve una cadena str, dando una breve descripción de un valor. Por defecto, devuelve string(typeof(x)), por ejemplo, Int64.
Para arreglos, devuelve una cadena con información sobre el tamaño y el tipo, por ejemplo, 10-element Array{Int64,1}.
Ejemplos
julia> summary(1)
"Int64"
julia> summary(zeros(2))
"2-element Vector{Float64}"Base.print — Functionprint([io::IO], xs...)Escribe en io (o en el flujo de salida predeterminado stdout si io no se proporciona) una representación de texto canónica (sin decoración). La representación utilizada por print incluye un formato mínimo y trata de evitar detalles específicos de Julia.
print recurre a llamar a show, por lo que la mayoría de los tipos solo deberían definir show. Define print si tu tipo tiene una representación "plana" separada. Por ejemplo, show muestra cadenas con comillas, y print muestra cadenas sin comillas.
Consulta también println, string, printstyled.
Ejemplos
julia> print("¡Hola Mundo!")
¡Hola Mundo!
julia> io = IOBuffer();
julia> print(io, "Hola", ' ', :Mundo!)
julia> String(take!(io))
"Hola Mundo!"Base.println — Functionprintln([io::IO], xs...)Imprime (usando print) xs en io seguido de una nueva línea. Si io no se proporciona, imprime en el flujo de salida predeterminado stdout.
Véase también printstyled para agregar colores, etc.
Ejemplos
julia> println("Hello, world")
Hello, world
julia> io = IOBuffer();
julia> println(io, "Hello", ',', " world.")
julia> String(take!(io))
"Hello, world.\n"Base.printstyled — Functionprintstyled([io], xs...; bold::Bool=false, italic::Bool=false, underline::Bool=false, blink::Bool=false, reverse::Bool=false, hidden::Bool=false, color::Union{Symbol,Int}=:normal)Imprime xs en un color especificado como un símbolo o un entero, opcionalmente en negrita.
La palabra clave color puede tomar cualquiera de los valores :normal, :italic, :default, :bold, :black, :blink, :blue, :cyan, :green, :hidden, :light_black, :light_blue, :light_cyan, :light_green, :light_magenta, :light_red, :light_white, :light_yellow, :magenta, :nothing, :red, :reverse, :underline, :white, o :yellow o un entero entre 0 y 255 inclusive. Ten en cuenta que no todos los terminales soportan 256 colores.
Las palabras clave bold=true, italic=true, underline=true, blink=true son autoexplicativas. La palabra clave reverse=true imprime con los colores de primer plano y fondo intercambiados, y hidden=true debería ser invisible en el terminal pero aún puede ser copiado. Estas propiedades pueden ser utilizadas en cualquier combinación.
Consulta también print, println, show.
No todos los terminales soportan salida en cursiva. Algunos terminales interpretan la cursiva como reversa o parpadeo.
Las palabras clave excepto color y bold fueron añadidas en Julia 1.7.
El soporte para salida en cursiva fue añadido en Julia 1.10.
Base.sprint — Functionsprint(f::Function, args...; context=nothing, sizehint=0)Llama a la función dada con un flujo de I/O y los argumentos adicionales suministrados. Todo lo escrito en este flujo de I/O se devuelve como una cadena. context puede ser un IOContext cuyas propiedades se utilizarán, un Pair que especifica una propiedad y su valor, o una tupla de Pair que especifica múltiples propiedades y sus valores. sizehint sugiere la capacidad del búfer (en bytes).
El argumento opcional context puede establecerse en un par :key=>value, una tupla de pares :key=>value, o un objeto IO o IOContext cuyas atributos se utilizan para el flujo de I/O pasado a f. El opcional sizehint es un tamaño sugerido (en bytes) para asignar al búfer utilizado para escribir la cadena.
Pasar una tupla al argumento clave context requiere Julia 1.7 o posterior.
Ejemplos
julia> sprint(show, 66.66666; context=:compact => true)
"66.6667"
julia> sprint(showerror, BoundsError([1], 100))
"BoundsError: attempt to access 1-element Vector{Int64} at index [100]"Base.showerror — Functionshowerror(io, e)Muestra una representación descriptiva de un objeto de excepción e. Este método se utiliza para mostrar la excepción después de una llamada a throw.
Ejemplos
julia> struct MyException <: Exception
msg::String
end
julia> function Base.showerror(io::IO, err::MyException)
print(io, "MyException: ")
print(io, err.msg)
end
julia> err = MyException("excepción de prueba")
MyException("excepción de prueba")
julia> sprint(showerror, err)
"MyException: excepción de prueba"
julia> throw(MyException("excepción de prueba"))
ERROR: MyException: excepción de pruebaBase.dump — Functiondump(x; maxdepth=8)Muestra cada parte de la representación de un valor. La profundidad de la salida se trunca en maxdepth.
Ejemplos
julia> struct MyStruct
x
y
end
julia> x = MyStruct(1, (2,3));
julia> dump(x)
MyStruct
x: Int64 1
y: Tuple{Int64, Int64}
1: Int64 2
2: Int64 3
julia> dump(x; maxdepth = 1)
MyStruct
x: Int64 1
y: Tuple{Int64, Int64}Base.Meta.@dump — Macro@dump exprMuestra cada parte de la representación de la expresión dada. Equivalente a dump(:(expr)).
Base.readline — Functionreadline(io::IO=stdin; keep::Bool=false)
readline(filename::AbstractString; keep::Bool=false)Lee una sola línea de texto del flujo de I/O o archivo dado (por defecto es stdin). Al leer de un archivo, se asume que el texto está codificado en UTF-8. Las líneas en la entrada terminan con '\n' o "\r\n" o el final de un flujo de entrada. Cuando keep es falso (como lo es por defecto), estos caracteres de nueva línea al final se eliminan de la línea antes de que se devuelva. Cuando keep es verdadero, se devuelven como parte de la línea.
Devuelve un String. Véase también copyline para escribir en su lugar en otro flujo (que puede ser un IOBuffer preasignado).
Véase también readuntil para leer hasta delimitadores más generales.
Ejemplos
julia> write("my_file.txt", "JuliaLang es una organización de GitHub.\nTiene muchos miembros.\n");
julia> readline("my_file.txt")
"JuliaLang es una organización de GitHub."
julia> readline("my_file.txt", keep=true)
"JuliaLang es una organización de GitHub.\n"
julia> rm("my_file.txt")julia> print("Introduce tu nombre: ")
Introduce tu nombre:
julia> your_name = readline()
Logan
"Logan"Base.readuntil — Functionreaduntil(stream::IO, delim; keep::Bool = false)
readuntil(filename::AbstractString, delim; keep::Bool = false)Lee una cadena de un stream de E/S o de un archivo, hasta el delimitador dado. El delimitador puede ser un UInt8, AbstractChar, cadena o vector. El argumento clave keep controla si el delimitador se incluye en el resultado. Se asume que el texto está codificado en UTF-8.
Devuelve un String si delim es un AbstractChar o una cadena, o de lo contrario devuelve un Vector{typeof(delim)}. Véase también copyuntil para escribir en su lugar en otro stream (que puede ser un IOBuffer preasignado).
Ejemplos
julia> write("my_file.txt", "JuliaLang is a GitHub organization.\nIt has many members.\n");
julia> readuntil("my_file.txt", 'L')
"Julia"
julia> readuntil("my_file.txt", '.', keep = true)
"JuliaLang is a GitHub organization."
julia> rm("my_file.txt")Base.readlines — Functionreadlines(io::IO=stdin; keep::Bool=false)
readlines(filename::AbstractString; keep::Bool=false)Lee todas las líneas de un flujo de I/O o de un archivo como un vector de cadenas. El comportamiento es equivalente a guardar el resultado de leer readline repetidamente con los mismos argumentos y guardar las líneas resultantes como un vector de cadenas. Véase también eachline para iterar sobre las líneas sin leerlas todas a la vez.
Ejemplos
julia> write("my_file.txt", "JuliaLang is a GitHub organization.\nIt has many members.\n");
julia> readlines("my_file.txt")
2-element Vector{String}:
"JuliaLang is a GitHub organization."
"It has many members."
julia> readlines("my_file.txt", keep=true)
2-element Vector{String}:
"JuliaLang is a GitHub organization.\n"
"It has many members.\n"
julia> rm("my_file.txt")Base.eachline — Functioneachline(io::IO=stdin; keep::Bool=false)
eachline(filename::AbstractString; keep::Bool=false)Crea un objeto iterable EachLine que generará cada línea de un flujo de E/S o un archivo. La iteración llama a readline en el argumento de flujo repetidamente con keep pasado, determinando si se retienen los caracteres de fin de línea al final. Cuando se llama con un nombre de archivo, el archivo se abre una vez al comienzo de la iteración y se cierra al final. Si la iteración se interrumpe, el archivo se cerrará cuando el objeto EachLine sea recolectado por el garbage collector.
Para iterar sobre cada línea de un String, se puede usar eachline(IOBuffer(str)).
Iterators.reverse se puede usar en un objeto EachLine para leer las líneas en orden inverso (para archivos, buffers y otros flujos de E/S que admiten seek), y first o last se pueden usar para extraer las líneas iniciales o finales, respectivamente.
Ejemplos
julia> write("my_file.txt", "JuliaLang is a GitHub organization.\n It has many members.\n");
julia> for line in eachline("my_file.txt")
print(line)
end
JuliaLang is a GitHub organization. It has many members.
julia> rm("my_file.txt");Se requiere Julia 1.8 para usar Iterators.reverse o last con iteradores eachline.
Base.copyline — Functioncopyline(out::IO, io::IO=stdin; keep::Bool=false)
copyline(out::IO, filename::AbstractString; keep::Bool=false)Copia una sola línea de texto de un stream de I/O o de un archivo al stream de out, devolviendo out.
Al leer de un archivo, se asume que el texto está codificado en UTF-8. Las líneas en la entrada terminan con '\n' o "\r\n" o el final de un stream de entrada. Cuando keep es falso (como lo es por defecto), estos caracteres de nueva línea al final se eliminan de la línea antes de que se devuelva. Cuando keep es verdadero, se devuelven como parte de la línea.
Similar a readline, que devuelve un String; en contraste, copyline escribe directamente en out, sin asignar una cadena. (Esto se puede usar, por ejemplo, para leer datos en un IOBuffer preasignado.)
Consulta también copyuntil para leer hasta delimitadores más generales.
Ejemplos
julia> write("my_file.txt", "JuliaLang es una organización de GitHub.\nTiene muchos miembros.\n");
julia> String(take!(copyline(IOBuffer(), "my_file.txt")))
"JuliaLang es una organización de GitHub."
julia> String(take!(copyline(IOBuffer(), "my_file.txt", keep=true)))
"JuliaLang es una organización de GitHub.\n"
julia> rm("my_file.txt")Base.copyuntil — Functioncopyuntil(out::IO, stream::IO, delim; keep::Bool = false)
copyuntil(out::IO, filename::AbstractString, delim; keep::Bool = false)
Copia una cadena de un `stream` de I/O o de un archivo, hasta el delimitador dado, al stream `out`, devolviendo `out`. El delimitador puede ser un `UInt8`, `AbstractChar`, cadena o vector. El argumento clave `keep` controla si el delimitador se incluye en el resultado. Se asume que el texto está codificado en UTF-8.
Similar a [`readuntil`](@ref), que devuelve un `String`; en contraste, `copyuntil` escribe directamente en `out`, sin asignar una cadena. (Esto se puede usar, por ejemplo, para leer datos en un [`IOBuffer`](@ref) preasignado.)
# Ejemplos
jldoctest julia> write("my_file.txt", "JuliaLang is a GitHub organization.\nIt has many members.\n");
julia> String(take!(copyuntil(IOBuffer(), "my_file.txt", 'L'))) "Julia"
julia> String(take!(copyuntil(IOBuffer(), "my_file.txt", '.', keep = true))) "JuliaLang is a GitHub organization."
julia> rm("my_file.txt") ```
Base.displaysize — Functiondisplaysize([io::IO]) -> (lines, columns)Devuelve el tamaño nominal de la pantalla que puede ser utilizada para renderizar la salida a este objeto IO. Si no se proporciona ninguna entrada, se leen las variables de entorno LINES y COLUMNS. Si no están configuradas, se devuelve un tamaño predeterminado de (24, 80).
Ejemplos
julia> withenv("LINES" => 30, "COLUMNS" => 100) do
displaysize()
end
(30, 100)Para obtener el tamaño de tu TTY,
julia> displaysize(stdout)
(34, 147)Multimedia I/O
Justo como la salida de texto se realiza mediante print y los tipos definidos por el usuario pueden indicar su representación textual sobrecargando show, Julia proporciona un mecanismo estandarizado para la salida multimedia rica (como imágenes, texto formateado o incluso audio y video), que consta de tres partes:
- Una función
display(x)para solicitar la representación multimedia más rica disponible de un objeto Juliax(con un retroceso en texto plano). - Sobrecargar
showpermite indicar representaciones multimedia arbitrarias (identificadas por tipos MIME estándar) de tipos definidos por el usuario. - Los backends de visualización capaces de multimedia pueden ser registrados al subclasear un tipo genérico
AbstractDisplayy empujándolos a una pila de backends de visualización a través depushdisplay.
El runtime base de Julia proporciona solo visualización en texto plano, pero se pueden habilitar visualizaciones más ricas cargando módulos externos o utilizando entornos gráficos de Julia (como el cuaderno IJulia basado en IPython).
Base.Multimedia.AbstractDisplay — TypeAbstractDisplaySupertipo abstracto para dispositivos de salida de visualización rica. TextDisplay es un subtipo de esto.
Base.Multimedia.display — Functiondisplay(x)
display(d::AbstractDisplay, x)
display(mime, x)
display(d::AbstractDisplay, mime, x)Muestra x utilizando la visualización más aplicable en la pila de visualización, típicamente usando la salida multimedia más rica soportada para x, con salida de texto plano stdout como respaldo. La variante display(d, x) intenta mostrar x solo en la visualización dada d, lanzando un MethodError si d no puede mostrar objetos de este tipo.
En general, no puedes asumir que la salida de display va a stdout (a diferencia de print(x) o show(x)). Por ejemplo, display(x) puede abrir una ventana separada con una imagen. display(x) significa "muestra x de la mejor manera que puedas para el(los) dispositivo(s) de salida actuales." Si deseas una salida de texto similar a REPL que esté garantizada para ir a stdout, usa show(stdout, "text/plain", x) en su lugar.
También hay dos variantes con un argumento mime (una cadena de tipo MIME, como "image/png"), que intentan mostrar x utilizando el tipo MIME solicitado solo, lanzando un MethodError si este tipo no es soportado ni por la(s) visualización(es) ni por x. Con estas variantes, también se puede proporcionar los datos "crudos" en el tipo MIME solicitado pasando x::AbstractString (para tipos MIME con almacenamiento basado en texto, como text/html o application/postscript) o x::Vector{UInt8} (para tipos MIME binarios).
Para personalizar cómo se muestran las instancias de un tipo, sobrecarga show en lugar de display, como se explica en la sección del manual sobre impresión bonita personalizada.
Base.Multimedia.redisplay — Functionredisplay(x)
redisplay(d::AbstractDisplay, x)
redisplay(mime, x)
redisplay(d::AbstractDisplay, mime, x)Por defecto, las funciones redisplay simplemente llaman a display. Sin embargo, algunos backends de visualización pueden anular redisplay para modificar una visualización existente de x (si la hay). Usar redisplay también es una pista para el backend de que x puede ser visualizado varias veces, y el backend puede optar por diferir la visualización hasta (por ejemplo) el siguiente aviso interactivo.
Base.Multimedia.displayable — Functiondisplayable(mime) -> Bool
displayable(d::AbstractDisplay, mime) -> BoolDevuelve un valor booleano que indica si el tipo mime dado (cadena) es mostrable por cualquiera de los displays en la pila de displays actual, o específicamente por el display d en la segunda variante.
Base.show — Methodshow(io::IO, mime, x)Las funciones display llaman en última instancia a show para escribir un objeto x como un tipo mime dado en un flujo de E/S io (generalmente un búfer de memoria), si es posible. Para proporcionar una representación multimedia rica de un tipo definido por el usuario T, solo es necesario definir un nuevo método show para T, a través de: show(io, ::MIME"mime", x::T) = ..., donde mime es una cadena de tipo MIME y el cuerpo de la función llama a write (o similar) para escribir esa representación de x en io. (Tenga en cuenta que la notación MIME"" solo admite cadenas literales; para construir tipos MIME de manera más flexible, use MIME{Symbol("")}.)
Por ejemplo, si define un tipo MyImage y sabe cómo escribirlo en un archivo PNG, podría definir una función show(io, ::MIME"image/png", x::MyImage) = ... para permitir que sus imágenes se muestren en cualquier AbstractDisplay capaz de PNG (como IJulia). Como de costumbre, asegúrese de import Base.show para agregar nuevos métodos a la función incorporada de Julia show.
Técnicamente, la macro MIME"mime" define un tipo singleton para la cadena mime dada, lo que nos permite aprovechar los mecanismos de despacho de Julia para determinar cómo mostrar objetos de cualquier tipo dado.
El tipo MIME predeterminado es MIME"text/plain". Hay una definición de respaldo para la salida text/plain que llama a show con 2 argumentos, por lo que no siempre es necesario agregar un método para ese caso. Sin embargo, si un tipo se beneficia de una salida personalizada legible por humanos, se debe definir show(::IO, ::MIME"text/plain", ::T). Por ejemplo, el tipo Day utiliza 1 day como salida para el tipo MIME text/plain, y Day(1) como salida de show de 2 argumentos.
Ejemplos
julia> struct Day
n::Int
end
julia> Base.show(io::IO, ::MIME"text/plain", d::Day) = print(io, d.n, " day")
julia> Day(1)
1 dayLos tipos contenedores generalmente implementan show de 3 argumentos llamando a show(io, MIME"text/plain"(), x) para los elementos x, con :compact => true establecido en un IOContext pasado como el primer argumento.
Base.Multimedia.showable — Functionshowable(mime, x)Devuelve un valor booleano que indica si el objeto x se puede escribir como el tipo mime dado.
(Por defecto, esto se determina automáticamente por la existencia del método correspondiente show para typeof(x). Algunos tipos proporcionan métodos showable personalizados; por ejemplo, si los formatos MIME disponibles dependen del valor de x.)
Ejemplos
julia> showable(MIME("text/plain"), rand(5))
true
julia> showable("image/png", rand(5))
falseBase.repr — Methodrepr(mime, x; context=nothing)Devuelve un AbstractString o Vector{UInt8} que contiene la representación de x en el tipo mime solicitado, tal como lo escribe show(io, mime, x) (lanzando un MethodError si no hay un show apropiado disponible). Se devuelve un AbstractString para tipos MIME con representaciones textuales (como "text/html" o "application/postscript"), mientras que los datos binarios se devuelven como Vector{UInt8}. (La función istextmime(mime) devuelve si Julia trata un tipo mime dado como texto.)
El argumento de palabra clave opcional context se puede establecer como un par :key=>value o un objeto IO o IOContext cuyas atributos se utilizan para el flujo de I/O pasado a show.
Como caso especial, si x es un AbstractString (para tipos MIME textuales) o un Vector{UInt8} (para tipos MIME binarios), la función repr asume que x ya está en el formato mime solicitado y simplemente devuelve x. Este caso especial no se aplica al tipo MIME "text/plain". Esto es útil para que los datos en bruto se puedan pasar a display(m::MIME, x).
En particular, repr("text/plain", x) es típicamente una versión "bien formateada" de x diseñada para el consumo humano. Véase también repr(x) para devolver en su lugar una cadena correspondiente a show(x) que puede estar más cerca de cómo se ingresaría el valor de x en Julia.
Ejemplos
julia> A = [1 2; 3 4];
julia> repr("text/plain", A)
"2×2 Matrix{Int64}:\n 1 2\n 3 4"Base.Multimedia.MIME — TypeMIMEUn tipo que representa un formato de datos estándar de internet. "MIME" significa "Extensiones de Correo de Internet Multipropósito", ya que el estándar se utilizó originalmente para describir archivos multimedia adjuntos a mensajes de correo electrónico.
Un objeto MIME se puede pasar como el segundo argumento a show para solicitar la salida en ese formato.
Ejemplos
julia> show(stdout, MIME("text/plain"), "hi")
"hi"Base.Multimedia.@MIME_str — Macro@MIME_strUna macro de conveniencia para escribir tipos de MIME, típicamente utilizada al agregar métodos a show. Por ejemplo, la sintaxis show(io::IO, ::MIME"text/html", x::MyType) = ... podría usarse para definir cómo escribir una representación HTML de MyType.
Como se mencionó anteriormente, también se pueden definir nuevos backends de visualización. Por ejemplo, un módulo que puede mostrar imágenes PNG en una ventana puede registrar esta capacidad con Julia, de modo que al llamar display(x) en tipos con representaciones PNG, la imagen se mostrará automáticamente utilizando la ventana del módulo.
Para definir un nuevo backend de visualización, primero se debe crear un subtipo D de la clase abstracta AbstractDisplay. Luego, para cada tipo MIME (mime string) que se puede mostrar en D, se debe definir una función display(d::D, ::MIME"mime", x) = ... que muestre x como ese tipo MIME, generalmente llamando a show(io, mime, x) o repr(io, mime, x). Se debe lanzar un MethodError si x no se puede mostrar como ese tipo MIME; esto es automático si se llama a show o repr. Finalmente, se debe definir una función display(d::D, x) que consulte showable(mime, x) para los tipos mime soportados por D y muestre el "mejor"; se debe lanzar un MethodError si no se encuentran tipos MIME soportados para x. De manera similar, algunos subtipos pueden desear anular redisplay(d::D, ...). (Nuevamente, se debe import Base.display para agregar nuevos métodos a display.) Los valores de retorno de estas funciones dependen de la implementación (ya que en algunos casos puede ser útil devolver un "manejador" de visualización de algún tipo). Las funciones de visualización para D se pueden llamar directamente, pero también se pueden invocar automáticamente desde display(x) simplemente empujando una nueva visualización en la pila del backend de visualización con:
Base.Multimedia.pushdisplay — Functionpushdisplay(d::AbstractDisplay)Empuja una nueva pantalla d en la parte superior de la pila de backend de visualización global. Llamar a display(x) o display(mime, x) mostrará x en el backend compatible más alto en la pila (es decir, el backend más alto que no lanza un MethodError).
Base.Multimedia.popdisplay — Functionpopdisplay()
popdisplay(d::AbstractDisplay)Desapila el backend superior de la pila de backend de visualización, o la copia superior de d en la segunda variante.
Base.Multimedia.TextDisplay — TypeTextDisplay(io::IO)Devuelve un TextDisplay <: AbstractDisplay, que muestra cualquier objeto como el tipo MIME text/plain (por defecto), escribiendo la representación de texto en el flujo de I/O dado. (Así es como se imprimen los objetos en el REPL de Julia.)
Base.Multimedia.istextmime — Functionistextmime(m::MIME)Determina si un tipo MIME es datos de texto. Se asume que los tipos MIME son datos binarios, excepto por un conjunto de tipos que se sabe que son datos de texto (posiblemente Unicode).
Ejemplos
julia> istextmime(MIME("text/plain"))
true
julia> istextmime(MIME("image/png"))
falseNetwork I/O
Base.bytesavailable — Functionbytesavailable(io)Devuelve el número de bytes disponibles para leer antes de que una lectura de este flujo o búfer bloquee.
Ejemplos
julia> io = IOBuffer("JuliaLang es una organización de GitHub");
julia> bytesavailable(io)
34Base.ntoh — Functionntoh(x)Convierte el orden de bytes de un valor del orden de bytes de red (big-endian) al que utiliza el host.
Base.hton — Functionhton(x)Convierte el orden de bytes de un valor del utilizado por el Host al orden de bytes de Red (big-endian).
Base.ltoh — Functionltoh(x)Convierte el orden de bytes de un valor de Little-endian al utilizado por el Host.
Base.htol — Functionhtol(x)Convierte el orden de bytes de un valor del utilizado por el Host a Little-endian.
Base.ENDIAN_BOM — ConstantENDIAN_BOMEl marcador de orden de bytes de 32 bits indica el orden de bytes nativo de la máquina anfitriona. Las máquinas little-endian contendrán el valor 0x04030201. Las máquinas big-endian contendrán el valor 0x01020304.