Skip to content

Commit

Permalink
deprecate read, readstring, and eachline with Cmd and stdin arg…
Browse files Browse the repository at this point in the history
…uments

remove unused/unexported `writeall`, fixes #18834
  • Loading branch information
JeffBezanson committed Jul 11, 2017
1 parent 37ca8c7 commit 1a8da5f
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 15 deletions.
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,9 @@ Deprecated or removed
and `is_windows`, have been deprecated in favor of `Sys.islinux`, `Sys.isbsd`, `Sys.isapple`,
`Sys.isunix`, and `Sys.iswindows`, respectively ([#22182]).

* The forms of `read`, `readstring`, and `eachline` that accepted both a `Cmd` object and an
input stream are deprecated. Use e.g. `read(pipeline(stdin, cmd))` instead ([#22762]).


Julia v0.6.0 Release Notes
==========================
Expand Down
4 changes: 4 additions & 0 deletions base/deprecated.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1577,6 +1577,10 @@ end
@deprecate is_unix Sys.isunix
@deprecate is_windows Sys.iswindows

@deprecate read(cmd::AbstractCmd, stdin::Redirectable) read(pipeline(stdin, cmd))
@deprecate readstring(cmd::AbstractCmd, stdin::Redirectable) readstring(pipeline(stdin, cmd))
@deprecate eachline(cmd::AbstractCmd, stdin; chomp::Bool=true) eachline(pipeline(stdin, cmd), chomp=chomp)

# END 0.7 deprecations

# BEGIN 1.0 deprecations
Expand Down
19 changes: 5 additions & 14 deletions base/process.jl
Original file line number Diff line number Diff line change
Expand Up @@ -553,16 +553,15 @@ spawn_opts_inherit(in::Redirectable=RawFD(0), out::Redirectable=RawFD(1), err::R
spawn(cmds::AbstractCmd, args...; chain::Nullable{ProcessChain}=Nullable{ProcessChain}()) =
spawn(cmds, spawn_opts_swallow(args...)...; chain=chain)

function eachline(cmd::AbstractCmd, stdin; chomp::Bool=true)
function eachline(cmd::AbstractCmd; chomp::Bool=true)
stdout = Pipe()
processes = spawn(cmd, (stdin,stdout,STDERR))
processes = spawn(cmd, (DevNull,stdout,STDERR))
close(stdout.in)
out = stdout.out
# implicitly close after reading lines, since we opened
return EachLine(out, chomp=chomp,
ondone=()->(close(out); success(processes) || pipeline_error(processes)))::EachLine
end
eachline(cmd::AbstractCmd; chomp::Bool=true) = eachline(cmd, DevNull, chomp=chomp)

# return a Process object to read-to/write-from the pipeline
"""
Expand Down Expand Up @@ -642,22 +641,14 @@ function readandwrite(cmds::AbstractCmd)
return (processes.out, processes.in, processes)
end

function read(cmd::AbstractCmd, stdin::Redirectable=DevNull)
procs = open(cmd, "r", stdin)
function read(cmd::AbstractCmd)
procs = open(cmd, "r", DevNull)
bytes = read(procs.out)
success(procs) || pipeline_error(procs)
return bytes
end

function readstring(cmd::AbstractCmd, stdin::Redirectable=DevNull)
return String(read(cmd, stdin))
end

function writeall(cmd::AbstractCmd, stdin::AbstractString, stdout::Redirectable=DevNull)
open(cmd, "w", stdout) do io
write(io, stdin)
end
end
readstring(cmd::AbstractCmd) = String(read(cmd))

"""
run(command, args...)
Expand Down
2 changes: 1 addition & 1 deletion doc/src/manual/running-external-programs.md
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ will attempt to store the data in the kernel's buffers while waiting for a reade
Another common solution is to separate the reader and writer of the pipeline into separate Tasks:

```julia
writer = @async writeall(process, "data")
writer = @async write(process, "data")
reader = @async do_compute(readstring(process))
wait(process)
fetch(reader)
Expand Down

0 comments on commit 1a8da5f

Please sign in to comment.