I/O和网络
一般I/O
# *`基地。讀!`*-Method
read(filename::AbstractString)
将文件的全部内容读取为 向量{UInt8}.
read(filename::AbstractString, String)
以字符串的形式读取文件的全部内容。
read(filename::AbstractString, args...)
打开文件并读取其内容。 阿格斯 被传递给 讀!:这相当于 打开(io->读取(io,args。..),文件名).
# *`基地。写`*-Method
write(filename::AbstractString, content)
编写规范的二进制表示 内容 到一个文件,如果它还不存在,将被创建,如果它确实存在,将被复盖。
返回写入文件的字节数。
# *`基地。打开`*-函数
open(f::Function, command, args...; kwargs...)
类似于 打开(命令,args。..;夸格斯。..),但呼叫 f(溪) 在生成的进程流上,然后关闭输入流并等待进程完成。 返回返回的值 f 关于成功。 如果进程失败,或者进程尝试将任何内容打印到stdout,则抛出错误。
open(command, stdio=devnull; write::Bool = false, read::Bool = !write)
开始跑步 命令 异步,并返回一个 过程::IO 对象。 如果 讀! 是真的,那么从进程读取来自进程的标准输出和 [医]心肺 可选地指定进程的标准输入流。 如果 写 是真的,然后写入进程的标准输入和 [医]心肺 可选地指定进程的标准输出流。 进程的标准错误流连接到当前全局 斯德尔.
open(command, mode::AbstractString, stdio=devnull)
跑 命令 异步。 像 打开(命令,stdio;读,写) 除了通过模式字符串而不是关键字参数指定读写标志。 可能的模式字符串是:
| 模式 | 资料描述 | 关键词 |
|---|---|---|
|
讀! |
无 |
|
写 |
|
|
读,写 |
|
|
读,写 |
|
open(fd::OS_HANDLE) -> IO
取一个原始文件描述符将其包装在Julia感知的IO类型中,并获得fd句柄的所有权。 打电话 开(Libc.dup(fd)) 以避免原始句柄的所有权捕获。
|
警告不要在已由系统其他部分拥有的句柄上调用此句柄。 |
open(filename::AbstractString, [mode::AbstractString]; lock = true) -> IOStream
Open的替代语法,其中使用基于字符串的模式说明符而不是五个布尔值。 的价值 模式 对应于那些从 福朋(3) 或Perl 打开,并且等效于设置以下布尔组:
| 模式 | 资料描述 | 关键词 |
|---|---|---|
|
讀! |
无 |
|
写入,创建,截断 |
|
|
写,创建,追加 |
|
|
读,写 |
|
|
读,写,创建,截断 |
|
|
读,写,创建,追加 |
|
该 锁,锁 关键字参数控制操作是否将被锁定以进行安全的多线程访问。
*例子*
julia> io = open("myfile.txt", "w");
julia> write(io, "Hello world!");
julia> close(io);
julia> io = open("myfile.txt", "r");
julia> read(io, String)
"Hello world!"
julia>write(io,"此文件为只读")
错误:ArgumentError:写入失败,IOStream不可写
[...]
朱莉娅>关闭(io)
julia>io=open("myfile.txt","a");
julia>write(io,"此流不是只读的")
28
朱莉娅>关闭(io)
julia>rm("myfile.txt")
|
兼容性
朱莉娅1.5 |
open(filename::AbstractString; lock = true, keywords...) -> IOStream
以五个布尔关键字参数指定的模式打开文件:
| 关键字 | 资料描述 | 违约情况 |
|---|---|---|
|
开放阅读 |
|
|
开放写作 |
|
|
创建如果不存在 |
|
|
截断为零大小 |
|
|
寻求结束 |
|
没有传递关键字时的默认值是打开文件以供读取。 返回用于访问打开的文件的流。
该 锁,锁 关键字参数控制操作是否将被锁定以进行安全的多线程访问。
|
兼容性
朱莉娅1.5 |
open(f::Function, args...; kwargs...)
应用函数 f 到的结果 打开(args...;夸格斯。..) 并在完成后关闭生成的文件描述符。
*例子*
julia> write("myfile.txt", "Hello world!");
julia> open(io->read(io, String), "myfile.txt")
"Hello world!"
julia> rm("myfile.txt")
# *`基地。IOBuffer的`*-类型
IOBuffer(string::String)
创建只读 IOBuffer的 在给定字符串基础的数据上。
*例子*
julia> io = IOBuffer("Haho");
julia> String(take!(io))
"Haho"
julia> String(take!(io))
"Haho"
IOBuffer([data::AbstractVector{UInt8}]; keywords...) -> IOBuffer
创建内存中的I/O流,该流可以选择性地对预先存在的阵列进行操作。
它可以采用可选的关键字参数:
* 讀!, 写, 追加:限制对缓冲区的操作;请参阅 打开 有关详情。
* 截断,截断:将缓冲区大小截断为零长度。
* 最大尺寸:指定缓冲区不能增长的大小。
* [医]大小:表示缓冲区的容量(数据资料 必须实施 sizehint!(数据、尺寸)).
何时 数据资料 没有给出,默认情况下缓冲区将是可读和可写的。
|
传球 |
*例子*
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)))
0
# *`基地。拿!`*-Method
take!(b::IOBuffer)
获取一个 IOBuffer的 作为阵列。 之后, IOBuffer的 被复位到其初始状态。
*例子*
julia> io = IOBuffer();
julia> write(io, "JuliaLang is a GitHub organization.", " It has many members.")
56
茱莉亚>字符串(拿!(io))
"JuliaLang是一个GitHub组织。 它有许多成员。"
# *`基地。水管/水管`*-类型
Pipe()
构造一个未初始化的Pipe对象,特别是用于多个进程之间的IO通信。
如果在进程生成中使用对象,管道的适当末端将自动初始化。 这对于在流程管道中轻松获取引用非常有用,例如:
julia> err = Pipe()
# After this `err` will be initialized and you may read `foo`'s
# stderr from the `err` pipe, or pass `err` to other pipelines.
julia> run(pipeline(pipeline(`foo`, stderr=err), `cat`), wait=false)
# Now destroy the write half of the pipe, so that the read half will get EOF
julia> closewrite(err)
julia> read(err, String)
"stderr messages"
请参阅 Base.link_pipe!.
# *`基地。接近/接近`*-函数
close(stream)
关闭I/O流。 执行一个 xref:base/io-network.adoc#Base.flush[冲水,冲水 第一个。
# *`基地。[医]近缘`*-函数
closewrite(stream)
关闭全双工I/O流的写入一半。 执行一个 xref:base/io-network.adoc#Base.flush[冲水,冲水 第一个。 通知另一端不再有数据写入底层文件。 这并不是所有IO类型都支持的。
如果实施, [医]近缘 导致后续 讀! 或 eof,eof 将阻塞的调用分别抛出EOF或返回true。 如果流已经关闭,这是幂等的。
*例子*
julia> io = Base.BufferStream(); # this never blocks, so we can read and write on the same Task
julia> write(io, "request");
julia> # calling `read(io)` here would block forever
julia> closewrite(io);
julia> read(io, String)
"request"
# *`基地。写`*-函数
write(io::IO, x)
将值的规范二进制表示形式写入给定的I/O流或文件。 返回写入流的字节数。 请参阅 印刷业编写文本表示(使用可能依赖的编码 伊俄).
您可以使用相同的值编写多个值 写 调用,即以下是等价的:
write(io, x, y...)
write(io, x) + write(io, y...)
*例子*
一致的序列化:
julia> fname = tempname(); # random temporary filename
julia> open(fname,"w") do f
# Make sure we write 64bit integer in little-endian byte order
write(f,htol(Int64(42)))
end
8
julia> open(fname,"r") do f
# Convert back to host byte order and host integer type
Int(ltoh(read(f,Int64)))
end
42
合并写入调用:
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> write(io, "Sometimes those members") + write(io, " write documentation.")
44
julia> String(take!(io))
"Sometimes those members write documentation."
用户定义的纯数据类型 写 方法可以在包装在 参考书:
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))
# *`基地。讀!`*-函数
read(command::Cmd, String)
跑 命令 并将结果输出返回为 字符串.
read(command::Cmd)
跑 命令 并将结果输出返回为字节数组。
read(s::IOStream, nb::Integer; all=true)
最多阅读 nb 字节从 s,返回 向量{UInt8} 读取的字节。
如果 全部 是 真的 (默认),此函数将阻止重复尝试读取所有请求的字节,直到发生错误或文件结束。 如果 全部 是 错误,最多一个 讀! 调用被执行,并且返回的数据量取决于设备。 请注意,并非所有流类型都支持 全部 选择。
read(s::IO, nb=typemax(Int))
最多阅读 nb 字节从 s,返回 向量{UInt8} 读取的字节。
read(filename::AbstractString)
将文件的全部内容读取为 向量{UInt8}.
read(filename::AbstractString, String)
以字符串的形式读取文件的全部内容。
read(filename::AbstractString, args...)
打开文件并读取其内容。 阿格斯 被传递给 讀!:这相当于 打开(io->读取(io,args。..),文件名).
read(io::IO, T)
读取类型的单个值 T 从 伊俄,在规范的二进制表示。
read(io::IO, String)
阅读全文 伊俄,作为一个 字符串 (另见 阅读,阅读).
*例子*
julia> io = IOBuffer("JuliaLang is a GitHub organization");
julia> read(io, Char)
'J': ASCII/Unicode U+004A (category Lu: Letter, uppercase)
julia> io = IOBuffer("JuliaLang is a GitHub organization");
julia> read(io, String)
"JuliaLang is a GitHub organization"
# *`基地。读吧!`*-函数
read!(stream::IO, array::AbstractArray)
read!(filename::AbstractString, array::AbstractArray)
从I/O流或文件中读取二进制数据,填写 阵列.
# *`基地。瑞德比提斯!`*-函数
readbytes!(stream::IOStream, b::AbstractVector{UInt8}, nb=length(b); all::Bool=true)
最多阅读 nb 字节从 溪涧 进入 b,返回读取的字节数。 的大小 b 如果需要,将增加(即如果 nb 大于 长度(b) 并且可以读取足够的字节),但它永远不会减少。
如果 全部 是 真的 (默认),此函数将阻止重复尝试读取所有请求的字节,直到发生错误或文件结束。 如果 全部 是 错误,最多一个 讀! 调用被执行,并且返回的数据量取决于设备。 请注意,并非所有流类型都支持 全部 选择。
readbytes!(stream::IO, b::AbstractVector{UInt8}, nb=length(b))
最多阅读 nb 字节从 溪涧 进入 b,返回读取的字节数。 的大小 b 如果需要,将增加(即如果 nb 大于 长度(b) 并且可以读取足够的字节),但它永远不会减少。
# *`基地。未读/未读`*-函数
unsafe_read(io::IO, ref, nbytes::UInt)
副本 n字节 从 伊俄 流对象到 参考书 (转换为指针)。
建议亚型 T<:IO 重写以下方法签名以提供更有效的实现: unsafe_read(s::T,p::Ptr{UInt8},n::UInt)
# *`基地。unsafe_write`*-函数
unsafe_write(io::IO, ref, nbytes::UInt)
副本 n字节 从 参考书 (转换为指针)到 伊俄 对象。
建议亚型 T<:IO 重写以下方法签名以提供更有效的实现: unsafe_write(s::T,p::Ptr{UInt8},n::UInt)
# *`基地。偷看,偷看`*-函数
peek(stream[, T=UInt8])
读取并返回类型的值 T 从流而不推进流中的当前位置。 请参阅 startswith(stream,char_or_string).
*例子*
julia> b = IOBuffer("julia");
julia> peek(b)
0x6a
julia> position(b)
0
julia> peek(b, Char)
'j': ASCII/Unicode U+006A (category Ll: Letter, lowercase)
|
兼容性
Julia1.5接受类型的方法需要Julia1.5或更高版本。 |
# *`基地。职位`*-函数
position(l::Lexer)
返回当前位置。
position(s)
获取流的当前位置。
*例子*
julia> io = IOBuffer("JuliaLang is a GitHub organization.");
julia> seek(io, 5);
julia> position(io)
5
julia> skip(io, 10);
julia> position(io)
15
julia> seekend(io);
julia> position(io)
35
# *`基地。寻求`*-函数
seek(s, pos)
求流到所述给定位置。
*例子*
julia> io = IOBuffer("JuliaLang is a GitHub organization.");
julia> seek(io, 5);
julia> read(io, Char)
'L': ASCII/Unicode U+004C (category Lu: Letter, uppercase)
# *`基地。寻求启动`*-函数
seekstart(s)
寻求流到它的开始。
*例子*
julia> io = IOBuffer("JuliaLang is a GitHub organization.");
julia> seek(io, 5);
julia> read(io, Char)
'L': ASCII/Unicode U+004C (category Lu: Letter, uppercase)
julia> seekstart(io);
julia> read(io, Char)
'J': ASCII/Unicode U+004A (category Lu: Letter, uppercase)
# *`基地。跳过`*-函数
skip(s, offset)
求相对于当前位置的流。
*例子*
julia> io = IOBuffer("JuliaLang is a GitHub organization.");
julia> seek(io, 5);
julia> skip(io, 10);
julia> read(io, Char)
'G': ASCII/Unicode U+0047 (category Lu: Letter, uppercase)
# *`基地。eof,eof`*-函数
eof(stream) -> Bool
测试I/O流是否位于文件末尾。 如果流尚未耗尽,则此函数将阻止等待更多数据(如果需要),然后返回 错误. 因此,在看到后读取一个字节总是安全的 eof,eof 回来吧 错误. eof,eof 会回来 错误 只要缓冲数据仍然可用,即使连接的远程端已关闭。
*例子*
julia> b = IOBuffer("my buffer");
julia> eof(b)
false
朱莉娅>seekend(b);
朱莉娅>eof(b)
真的
# *`基地。isreadonly碌录潞陆`*-函数
isreadonly(io) -> Bool
确定流是否为只读。
*例子*
julia> io = IOBuffer("JuliaLang is a GitHub organization");
julia> isreadonly(io)
true
julia> io = IOBuffer();
julia> isreadonly(io)
false
# *`基地。iswritable缧`*-函数
iswritable(path::String)
回来吧 真的 如果给定的访问权限 路径 当前用户允许写入。
|
注意此权限可能会在用户调用之前更改 |
|
注意目前此函数不能正确查询Windows上的文件系统Acl,因此它可能返回错误的结果。 |
|
兼容性
Julia1.11此功能至少需要Julia1.11。 |
请参阅 ispath, isexecutable的, 可读性.
iswritable(io) -> Bool
回来吧 错误 如果指定的IO对象不可写。
*例子*
julia> open("myfile.txt", "w") do io
print(io, "Hello world!");
iswritable(io)
end
true
julia> open("myfile.txt", "r") do io
iswritable(io)
end
false
julia> rm("myfile.txt")
# *`基地。可读性`*-函数
isreadable(path::String)
回来吧 真的 如果给定的访问权限 路径 允许当前用户阅读。
|
注意此权限可能会在用户调用之前更改 |
|
注意目前此函数不能正确查询Windows上的文件系统Acl,因此它可能返回错误的结果。 |
|
兼容性
Julia1.11此功能至少需要Julia1.11。 |
请参阅 ispath, isexecutable的, iswritable缧.
isreadable(io) -> Bool
回来吧 错误 如果指定的IO对象不可读。
*例子*
julia> open("myfile.txt", "w") do io
print(io, "Hello world!");
isreadable(io)
end
false
julia> open("myfile.txt", "r") do io
isreadable(io)
end
true
julia> rm("myfile.txt")
# *`基地。isexecutable的`*-函数
isexecutable(path::String)
回来吧 真的 如果给定 路径 具有可执行权限。
|
注意此权限可能会在用户执行之前更改 |
|
请注意,在Julia1.6之前,它没有正确地询问Windows上的文件系统Acl,因此它将返回 |
请参阅 ispath, 可读性, iswritable缧.
# *`基地。食物及卫生局`*-函数
fd(x) -> RawFD
返回支持流、文件或套接字的文件描述符。
RawFD 对象可以通过 ccall 界面。
|
兼容性
Julia1.12在1.12之前,这个函数返回了一个 |
|
兼容性
Julia1.12从Julia1.12开始支持获取套接字的文件描述符。 |
|
警告将返回的文件描述符复制为 |
|
警告套接字的文件描述符是异步的(即 |
# *`基地。重定向_stdio`*-函数
redirect_stdio(f; stdin=nothing, stderr=nothing, stdout=nothing)
重定向流的子集 标准普尔, 斯德尔, 标准输出,打电话 f() 并恢复每个流。
每个流的可能值是:
* 什么都没有 指示流不应重定向。
* 路径::AbstractString 将流重定向到 路径.
* 伊俄 一个 [美]梦, TTY缧, 水管/水管、套接字或 德夫努尔.
*例子*
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"
*边缘案例*
可以将相同的参数传递给 标准输出 和 斯德尔:
julia> redirect_stdio(stdout="log.txt", stderr="log.txt", stdin=devnull) do
...
end
但是不支持传递同一文件的两个不同的描述符。
julia> io1 = open("same/path", "w")
julia> io2 = open("same/path", "w")
julia> redirect_stdio(f, stdout=io1, stderr=io2) # not supported
此外, 标准普尔 参数可能不是与描述符相同的描述符 标准输出 或 斯德尔.
julia> io = open(...)
julia> redirect_stdio(f, stdout=io, stdin=io) # not supported
|
兼容性
朱莉娅1.7 |
redirect_stdio(;stdin=stdin, stderr=stderr, stdout=stdout)
重定向流的子集 标准普尔, 斯德尔, 标准输出. 每个参数必须是 [美]梦, TTY缧, 水管/水管、套接字或 德夫努尔.
|
兼容性
朱莉娅1.7 |
# *`基地。redirect_stderr`*-函数
redirect_stderr([stream]) -> stream
像 redirect_stdout,但对于 斯德尔.
|
注 |
请参阅 重定向_stdio.
# *`基地。重定向_stdin`*-函数
redirect_stdin([stream]) -> stream
像 redirect_stdout,但对于 标准普尔. 请注意,流的方向是相反的。
|
注 |
请参阅 重定向_stdio.
# *`基地。阅读,阅读`*-函数
readchomp(x)
阅读全文 x 作为一个字符串,如果有一个,则删除单个尾随换行符。 相当于 chomp(读(x,字符串)).
*例子*
julia> write("my_file.txt", "JuliaLang is a GitHub organization.\nIt has many members.\n");
julia> readchomp("my_file.txt")
"JuliaLang is a GitHub organization.\nIt has many members."
julia> rm("my_file.txt");
# *`基地。截断,截断`*-函数
truncate(file, n)
将第一个参数给出的文件或缓冲区的大小调整为精确 n 字节,如果文件或缓冲区增长,则用"\0"填充以前未分配的空间。
*例子*
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"
# *`基地。跳板,跳板`*-函数
skipchars(predicate, io::IO; linecomment=nothing)
推进溪流 伊俄 这样下一个读取的字符将是第一个剩余的字符。 谓词,谓词 申报表 错误. 如果关键字参数 线材,线材 被指定,从该字符到下一行开始的所有字符都被忽略。
*例子*
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"
# *`基地。计数线`*-函数
countlines(io::IO; eol::AbstractChar = '\n')
countlines(filename::AbstractString; eol::AbstractChar = '\n')
讀! 伊俄 直到流/文件结束并计数行数。 要指定文件,请将文件名作为第一个参数传递。 EOL标记物以外 '\n' 通过将它们作为第二个参数传递来支持。 的最后一个非空行 伊俄 被计数,即使它不以EOL结束,匹配返回的长度 每行和 阅读线.
计数a的行 字符串, 计数线(iobuffer(str)) 可以使用。
*例子*
julia> io = IOBuffer("JuliaLang is a GitHub organization.\n");
julia> countlines(io)
1
julia> io = IOBuffer("JuliaLang is a GitHub organization.");
julia> countlines(io)
1
julia> eof(io) # counting lines moves the file pointer
true
julia> io = IOBuffer("JuliaLang is a GitHub organization.");
julia> countlines(io, eol = '.')
1
julia> write("my_file.txt", "JuliaLang is a GitHub organization.\n")
36
julia> countlines("my_file.txt")
1
julia> countlines("my_file.txt", eol = 'n')
4
julia> rm("my_file.txt")
xref/# *`基地。IOContext`*-类型
IOContext
IOContext 提供一种机制,用于将输出配置设置传递到 xref:base/io-network。adoc#基。显示元组{IO,%20}[展览]方法。
简而言之,它是一个不可变的字典,它是 伊俄. 它支持标准的字典操作,如 xref:base/collections。adoc#基。getindex,getindex[getindex,getindex],并且还可以用作I/O流。
xref/# *`基地。IOContext`*-Method
IOContext(io::IO,KV::Pair...)
创建一个 IOContext 包装一个给定的流,添加指定的 键=>值 对该流的属性(请注意 伊俄 本身可以是一个 IOContext).
*使用 (键=>值)在io 要查看此特定组合是否在属性集中
*使用 get(io,key,default) 检索特定键的最新值
以下属性常用:
* :紧凑型:Boolean指定值应该更紧凑地打印,例如数字应该用更少的数字打印。 这是在打印数组元素时设置的。 :紧凑型 输出不应包含换行符。
* :限制:Boolean指定容器应该被截断,例如显示 … 代替大多数元素。
* :显示尺寸:A 元组{Int,Int} 给出用于文本输出的行和列的大小。 这可以用来复盖被调用函数的显示大小,但要获得屏幕的大小,请使用 显示尺寸 函数。
* :打字资讯:a 类型 表征关于将要显示的对象的类型的已经打印的信息。 这在显示相同类型的对象集合时主要有用,以便可以避免冗余类型信息(例如 [地板16(0)] 可以显示为"Float16[0.0]"而不是"Float16[Float16(0.0)]":在显示数组的元素时, :打字资讯 属性将设置为 漂浮物16).
* :颜色:Boolean指定是否支持/期望ANSI颜色/转义码。 默认情况下,这取决于是否 伊俄 是一个兼容的终端,并由任何 --颜色 命令行标志时 朱莉娅 是发射的。
*例子*
julia>io=IOBuffer(); julia>printstyled(IOContext(io,:color=>true),"string",color=:red) 茱莉亚>字符串(拿!(io)) "\e[31m]\e[39m" julia>printstyled(io,"string",color=:red) 茱莉亚>字符串(拿!(io)) "字符串"
julia>print(IOContext(stdout,:compact=>false),1.12341234) 1.12341234 julia>打印(iocontext(stdout,:compact=>true),1.12341234) 1.12341
julia>函数f(io::IO)
如果get(io,:short,false)
打印(io,"短")
其他
打印(io,"loooooong")
结束
结束
f(具有1方法的泛型函数)
朱莉娅>f(stdout)
[医]龙
julia>f(IOContext(stdout,:short=>true))
短
xref/# *`基地。IOContext`*-Method
IOContext(io::IO,context::IOContext)
创建一个 IOContext 这包装了一个备用 伊俄 但继承了 上下文环境.
注意,除非在包装中明确设置 伊俄 该 显示尺寸 的 伊俄 不会被继承。 这是因为默认情况下 显示尺寸 不是IO对象本身的属性,而是懒惰地推断出来的,因为终端窗口的大小可以在IO对象的生存期内改变。
文本I/O
# *`基地。展览`*-Method
show([io::IO = stdout], x)
编写值的文本表示形式 x 到输出流 伊俄. 新类型 T 应超载 显示(io::IO,x::T). 所使用的表示 展览 通常包括Julia特定的格式和类型信息,并且在可能的情况下应该是可分析的Julia代码。
repr代表返回 展览 作为字符串。
用于类型对象的更详细的人类可读文本输出 T,定义 显示(io::IO,::MIME"text/plain",::T) 此外。 检查 :紧凑型 IOContext键(经常检查为 get(io,:compact,false)::Bool)的 伊俄 在这样的方法中是推荐的,因为一些容器通过调用这个方法来显示它们的元素 :紧凑=>真.
请参阅 印刷业,其中写入未修饰的表示。
*例子*
julia> show("Hello World!")
"Hello World!"
julia> print("Hello World!")
Hello World!
# *`基地。印刷业`*-函数
print([io::IO], xs...)
写信给 伊俄 (或到默认输出流 标准输出如果 伊俄 未给出)一个规范的(未修饰的)文本表示。 所使用的表示 印刷业 包括最小的格式,并试图避免朱莉娅特定的细节。
印刷业 回到调用2参数 显示(io,x) 对于每个参数 x 在 x,所以大多数类型应该只是定义 展览. 定义 印刷业 如果你的类型有一个单独的"普通"表示。 例如, 展览 显示带引号的字符串,以及 印刷业 显示不带引号的字符串。
*例子*
julia> print("Hello World!")
Hello World!
julia> io = IOBuffer();
julia> print(io, "Hello", ' ', :World!)
julia> String(take!(io))
"Hello World!"
# *`基地。[医]印刷版`*-函数
printstyled([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)
印刷业 x 在指定为符号或整数的颜色中,可选用粗体。
关键字 颜色 可以取任何值 :正常, :斜体, :默认值, :粗体, :黑色, :眨眼, :蓝色, :青色, :绿色, :隐藏, :光黑, :光蓝, :光_cyan, :光绿色, :light_magenta, :光红, :光白, :光黄, :洋红色, :没有, :红色, :反向, :下划线, :白色,或 :黄色 或0到255之间的整数。 请注意,并非所有终端都支持256种颜色。
关键词 粗体=真, 斜体=真, 下划线=真, 眨眼=真 是不言自明的。 关键字 反向=真 交换前景色和背景色的印刷品,以及 隐藏=真 应该在终端中不可见,但仍然可以复制。 这些性质可以任意组合使用。
|
注意并非所有终端都支持斜体输出。 一些终端将斜体解释为反向或闪烁。 |
|
兼容性
Julia1.7关键字除外 |
|
兼容性
Julia1.10在Julia1.10中增加了对斜体输出的支持。 |
# *`基地。冲刺`*-函数
sprint(f::Function, args...; context=nothing, sizehint=0)
使用I/O流和提供的额外参数调用给定函数。 写入此I/O流的所有内容都作为字符串返回。 上下文环境 可以是一个 IOContext其属性将被使用,一个 对 指定属性及其值,或 对 指定多个属性及其值。 [医]大小 建议缓冲区的容量(以字节为单位)。
可选关键字参数 上下文环境 可以设置为一个 :键=>值 对,一个元组 :键=>值 对,或一个 伊俄 或 IOContext对象,其属性用于传递到的I/O流 f. 可选项 [医]大小 为用于写入字符串的缓冲区分配的建议大小(以字节为单位)。
|
兼容性
Julia1.7将元组传递给关键字 |
*例子*
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]"
# *`基地。n.淋浴器`*-函数
showerror(io, e)
显示异常对象的描述性表示 e. 此方法用于在调用 投掷.
*例子*
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("test exception")
MyException("test exception")
julia> sprint(showerror, err)
"MyException: test exception"
julia> throw(MyException("test exception"))
ERROR: MyException: test exception
# *`基地。垃圾场`*-函数
dump(x; maxdepth=8)
显示值表示的每个部分。 输出的深度被截断在 最大深度.
*例子*
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}
# *`基地。读线`*-函数
readline(io::IO=stdin; keep::Bool=false)
readline(filename::AbstractString; keep::Bool=false)
从给定的I/O流或文件中读取一行文本(默认为 标准普尔). 从文件读取时,假定文本以UTF-8编码。 输入端的行与 '\n' 或 "\r\n" 或一个输入流的结束。 何时 保持 是false(默认情况下是这样),这些尾随换行符在返回之前从行中删除。 何时 保持 是真的,它们作为行的一部分返回。
请参阅 阅读,阅读用于阅读,直到更一般的分隔符。
*例子*
julia> write("my_file.txt", "JuliaLang is a GitHub organization.\nIt has many members.\n");
julia> readline("my_file.txt")
"JuliaLang is a GitHub organization."
julia>readline("my_file.txt",保持=true)
"JuliaLang是一个GitHub组织。\n"
julia>rm("my_file.txt")
julia> print("Enter your name: ")
Enter your name:
julia> your_name = readline()
Logan
"Logan"
# *`基地。阅读,阅读`*-函数
readuntil(stream::IO, delim; keep::Bool = false)
readuntil(filename::AbstractString, delim; keep::Bool = false)
从I/O读取字符串 溪涧 或者一个文件,直到给定的分隔符。 分隔符可以是 UInt8, 摘要:、字符串或向量。 关键字参数 保持 控制分隔符是否包含在结果中。 假定文本以UTF-8编码。
*例子*
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")
# *`基地。阅读线`*-函数
readlines(io::IO=stdin; keep::Bool=false)
readlines(filename::AbstractString; keep::Bool=false)
*例子*
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")
# *`基地。每行`*-函数
eachline(io::IO=stdin; keep::Bool=false)
eachline(filename::AbstractString; keep::Bool=false)
创建一个可迭代的 每行 将从I/O流或文件产生每行的对象。 迭代调用 读线在流参数反复与 保持 通过,确定是否保留行尾字符。 当使用文件名调用时,文件在迭代开始时打开一次,并在结束时关闭。 如果迭代中断,文件将在 每行 对象进行垃圾回收。
遍历a的每一行 字符串, 每行(IOBuffer(str)) 可以使用。
*例子*
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");
|
兼容性
Julia1.8Julia1.8需要使用 |
# *`基地。[医]折线`*-函数
copyline(out::IO, io::IO=stdin; keep::Bool=false)
copyline(out::IO, filename::AbstractString; keep::Bool=false)
从I/O复制一行文本 溪涧 或文件到 出 流,返回 出.
从文件读取时,假定文本以UTF-8编码。 输入端的行与 '\n' 或 "\r\n" 或一个输入流的结束。 何时 保持 是false(默认情况下是这样),这些尾随换行符在返回之前会从行中删除。 何时 保持 是真的,它们作为行的一部分返回。
请参阅 复制,复制用于阅读,直到更一般的分隔符。
*例子*
julia> write("my_file.txt", "JuliaLang is a GitHub organization.\nIt has many members.\n");
julia> String(take!(copyline(IOBuffer(), "my_file.txt")))
"JuliaLang is a GitHub organization."
julia> String(take!(copyline(IOBuffer(), "my_file.txt", keep=true)))
"JuliaLang is a GitHub organization.\n"
julia> rm("my_file.txt")
# *`基地。复制,复制`*-函数
copyuntil(out::IO, stream::IO, delim; keep::Bool = false)
copyuntil(out::IO, filename::AbstractString, delim; keep::Bool = false)
从I/O复制字符串 溪涧 或者一个文件,直到给定的分隔符,到 出 流,返回 出. 分隔符可以是 UInt8, 摘要:、字符串或向量。 关键字参数 保持 控制分隔符是否包含在结果中。 假定文本以UTF-8编码。
*例子*
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")
# *`基地。显示尺寸`*-函数
displaysize([io::IO]) -> (lines, columns)
返回可能用于渲染输出的屏幕的标称大小 伊俄 对象。 如果未提供输入,则环境变量 线条 和 列 被阅读。 如果未设置,则默认大小为 (24, 80) 被退回。
*例子*
julia> withenv("LINES" => 30, "COLUMNS" => 100) do
displaysize()
end
(30, 100)
得到你的TTY尺寸,
julia> displaysize(stdout)
(34, 147)
多媒体I/O
*一个函数 显示(x)请求Julia对象最丰富的可用多媒体显示 x (带有纯文本回退)。
*超载 展览允许指示用户定义类型的任意多媒体表示(由标准MIME类型键控)。
*支持多媒体的显示后端可以通过子类化泛型来注册 [医抽象游戏]键入并通过以下方式将它们推送到显示后端堆栈上 n.推手,推手.
基本Julia运行时仅提供纯文本显示,但可以通过加载外部模块或使用图形Julia环境(如基于IPython的IJulia笔记本)来启用更丰富的显示。
# *`基地。多媒体。展览及展览`*-函数
display(x)
display(d::AbstractDisplay, x)
display(mime, x)
display(d::AbstractDisplay, mime, x)
展览及展览 x 使用显示堆栈中最顶层的适用显示器,通常使用支持的最丰富的多媒体输出 x,以纯文本 标准输出输出作为回退。 该 显示(d,x) 变体尝试显示 x 在给定的显示器上 d 只是,扔了一个 方法;方法如果 d 无法显示此类型的对象。
一般来说,你不能假设 展览及展览 输出转到 标准输出 (不像 印刷(x)或 显示(x)). 例如, 显示(x) 可以打开一个单独的窗口与图像。 显示(x) 意思是"显示 x 以最好的方式,你可以为当前输出设备(s)。"如果你想要类似REPL的文本输出,保证去 标准输出,使用 显示(stdout,"text/plain",x)代替。
也有两个变种与一个 默剧 参数(MIME类型字符串,如 "图像/png"),试图显示 x 使用请求的MIME类型_only_,抛出一个 方法;方法 如果显示器或显示器不支持此类型 x. 使用这些变体,还可以通过传递来提供请求的MIME类型中的"原始"数据 X::抽象字符串 (对于具有基于文本的存储的MIME类型,例如text/html或application/postscript)或 x::向量{UInt8} (对于二进制MIME类型)。
# *`基地。多媒体。可显示`*-函数
displayable(mime) -> Bool
displayable(d::AbstractDisplay, mime) -> Bool
返回一个布尔值,指示是否给定 默剧 类型(字符串)可由当前显示堆栈中的任何显示器显示,或者具体地由显示器显示 d 在第二变型中。
# *`基地。展览`*-Method
show(io::IO, mime, x)
该 展览及展览函数最终调用 展览 为了写一个对象 x 作为给定的 默剧 键入给定的I/O流 伊俄 (通常是内存缓冲区),如果可能的话。 为了提供用户定义类型的丰富多媒体表示 T,只需要定义一个新的 展览 的方法 T,通过: show(io,::MIME"mime",x::T)=。..,在哪里 默剧 是一个MIME类型的字符串,函数体调用 写(或类似的)写出 x 到 伊俄. (请注意, 默剧"" 表示法只支持文字字符串;要构造 默剧 类型以更灵活的方式使用 默剧{Symbol("")}.)
例如,如果定义了 我的形象 键入并知道如何将其写入PNG文件,您可以定义一个函数 show(io,::MIME"image/png",x::MyImage)=。.. 允许您的图像显示在任何支持PNG的图像上 [医]抽象游戏 (如IJulia)。 像往常一样,一定要 进口基地。展览 为了给内置的Julia函数添加新的方法 展览.
从技术上讲, 默剧"默剧" 宏定义给定的单例类型 默剧 string,它允许我们利用Julia的调度机制来确定如何显示任何给定类型的对象。
默认的MIME类型是 MIME"text/plain". 有一个回退定义 文本/纯文本 调用的输出 展览 有2个参数,所以并不总是需要为这种情况添加一个方法。 如果一个类型受益于自定义的人类可读输出, show(::IO,::MIME"text/plain",::T) 应的定义。 例如, 日 类型用途 1天 作为输出的 文本/纯文本 MIME类型,以及 日(1) 作为2参数的输出 展览.
*例子*
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 day
容器类型通常实现3参数 展览 通过调用 show(io,MIME"text/plain"(),x) 对于元素 x,与 :紧凑=>真 设置在 IOContext作为第一个参数传递。
# *`基地。代表`*-Method
repr(mime, x; context=nothing)
返回 抽象字符串 或 向量{UInt8} 包含的表示 x 在请求 默剧 类型,如写 显示(io,mime,x))(扔一个 xref:base/base.adoc#Core.MethodError[方法;方法如果没有适当的 展览 是可用的)。 一个 抽象字符串 为具有文本表示的MIME类型返回(例如 "文本/html" 或 "应用程序/后记"),而二进制数据返回为 向量{UInt8}. (功能 istextmime(mime) 返回Julia是否对待给定 默剧 键入为文本。)
可选关键字参数 上下文环境 可以设置为 :键=>值 对或一个 伊俄 或 IOContext对象,其属性用于传递到的I/O流 展览.
作为特例,如果 x 是一个 抽象字符串 (对于文本MIME类型)或 向量{UInt8} (对于二进制MIME类型), repr代表 函数假定 x 已经在请求中了 默剧 格式和简单返回 x. 此特例不适用于 "文字/纯文字" MIME类型。 这是有用的,以便原始数据可以传递到 显示(m::MIME,x).
*例子*
julia> A = [1 2; 3 4];
julia> repr("text/plain", A)
"2×2 Matrix{Int64}:\n 1 2\n 3 4"
如上所述,还可以定义新的显示后端。 例如,可以在窗口中显示PNG图像的模块可以向Julia注册此功能,以便调用 显示(x)在具有PNG表示的类型上,将使用模块的窗口自动显示图像。
为了定义一个新的显示后端,首先应该创建一个子类型 D 抽象类的 [医抽象游戏]. 然后,对于每个MIME类型(默剧 字符串),可以显示在 D,应该定义一个函数 display(d::D,::MIME"mime",x)=。.. 显示出来的 x 作为MIME类型,通常通过调用 显示(io,mime,x)或 repr(io,mime,x). A 方法;方法应抛出,如果 x 不能显示为该MIME类型;如果调用该类型,这是自动的 展览 或 代表. 最后,我们应该定义一个函数 显示(d::D,x) 那个查询 可显示(mime,x)为 默剧 支持的类型 D 并显示"最好的"一个;一个 方法;方法 如果没有找到支持的MIME类型,则应抛出 x. 同样,某些子类型可能希望复盖 redisplay(d::D,...). (再次,应该 进口基地。展览及展览 将新方法添加到 展览及展览.)这些函数的返回值取决于实现(因为在某些情况下,返回某种类型的显示"句柄"可能很有用)。 显示功能 D 然后可以直接调用,但它们也可以从 xref:base/io-network.adoc#Base.Multimedia.display[显示(x) 只需将一个新的显示推送到显示后端堆栈上,:
# *`基地。多媒体。文字游戏`*-类型
TextDisplay(io::IO)
返回a TextDisplay<:AbstractDisplay,它将任何对象显示为text/plain MIME类型(默认情况下),将文本表示形式写入给定的I/O流。 (这就是在Julia REPL中打印对象的方式。)
# *`基地。多媒体。[医]伊斯特梅`*-函数
istextmime(m::MIME)
确定MIME类型是否为文本数据。 除了一组已知为文本数据(可能是Unicode)的类型外,MIME类型被假定为二进制数据。
*例子*
julia> istextmime(MIME("text/plain"))
true
julia> istextmime(MIME("image/png"))
false