@@ -465,46 +465,52 @@ eachline(cmd::AbstractCmd) = eachline(cmd, DevNull)
465465
466466# return a Process object to read-to/write-from the pipeline
467467function open (cmds:: AbstractCmd , mode:: AbstractString = " r" , other:: AsyncStream = DevNull)
468- if mode == " r"
468+ if mode == " r+" || mode == " w+"
469+ other === DevNull || throw (ArgumentError (" no other stream for mode rw+" ))
470+ in = Pipe ()
471+ out = Pipe ()
472+ processes = spawn (cmds, (in,out,STDERR))
473+ close (in. out)
474+ close (out. in)
475+ elseif mode == " r"
469476 in = other
470- out = io = Pipe ()
477+ out = Pipe ()
471478 processes = spawn (cmds, (in,out,STDERR))
472479 close (out. in)
473480 elseif mode == " w"
474- in = io = Pipe ()
481+ in = Pipe ()
475482 out = other
476483 processes = spawn (cmds, (in,out,STDERR))
477484 close (in. out)
478485 else
479486 throw (ArgumentError (" mode must be \" r\" or \" w\" , not \" $mode \" " ))
480487 end
481- return (io, processes)
488+ return processes
482489end
483490
484491function open (f:: Function , cmds:: AbstractCmd , args... )
485- io, P = open (cmds, args... )
492+ P = open (cmds, args... )
486493 ret = try
487- f (io )
494+ f (P )
488495 catch
489496 kill (P)
490497 rethrow ()
491498 finally
492- close (io )
499+ close (P )
493500 end
494501 success (P) || pipeline_error (P)
495502 return ret
496503end
497504
498505# TODO : deprecate this
499506function readandwrite (cmds:: AbstractCmd )
500- in = Pipe ()
501- out, processes = open (cmds, " r" , in)
502- (out, in, processes)
507+ processes = open (cmds, " r+" )
508+ (processes. out, processes. in, processes)
503509end
504510
505511function readbytes (cmd:: AbstractCmd , stdin :: AsyncStream = DevNull)
506- out, procs = open (cmd, " r" , stdin )
507- bytes = readbytes (out)
512+ procs = open (cmd, " r" , stdin )
513+ bytes = readbytes (procs . out)
508514 ! success (procs) && pipeline_error (procs)
509515 return bytes
510516end
0 commit comments