mirror of
https://github.com/janet-lang/janet
synced 2024-11-29 03:19:54 +00:00
Address #968 Ignore :pipe arguments in os/execute.
They are only useful in os/spawn. Also update docstrings.
This commit is contained in:
parent
b4ec168401
commit
73f5c41fae
@ -836,19 +836,19 @@ static Janet os_execute_impl(int32_t argc, Janet *argv, int is_spawn) {
|
|||||||
Janet maybe_stdin = janet_dictionary_get(tab.kvs, tab.cap, janet_ckeywordv("in"));
|
Janet maybe_stdin = janet_dictionary_get(tab.kvs, tab.cap, janet_ckeywordv("in"));
|
||||||
Janet maybe_stdout = janet_dictionary_get(tab.kvs, tab.cap, janet_ckeywordv("out"));
|
Janet maybe_stdout = janet_dictionary_get(tab.kvs, tab.cap, janet_ckeywordv("out"));
|
||||||
Janet maybe_stderr = janet_dictionary_get(tab.kvs, tab.cap, janet_ckeywordv("err"));
|
Janet maybe_stderr = janet_dictionary_get(tab.kvs, tab.cap, janet_ckeywordv("err"));
|
||||||
if (janet_keyeq(maybe_stdin, "pipe")) {
|
if (is_spawn && janet_keyeq(maybe_stdin, "pipe")) {
|
||||||
new_in = make_pipes(&pipe_in, 1, &pipe_errflag);
|
new_in = make_pipes(&pipe_in, 1, &pipe_errflag);
|
||||||
pipe_owner_flags |= JANET_PROC_OWNS_STDIN;
|
pipe_owner_flags |= JANET_PROC_OWNS_STDIN;
|
||||||
} else if (!janet_checktype(maybe_stdin, JANET_NIL)) {
|
} else if (!janet_checktype(maybe_stdin, JANET_NIL)) {
|
||||||
new_in = janet_getjstream(&maybe_stdin, 0, &orig_in);
|
new_in = janet_getjstream(&maybe_stdin, 0, &orig_in);
|
||||||
}
|
}
|
||||||
if (janet_keyeq(maybe_stdout, "pipe")) {
|
if (is_spawn && janet_keyeq(maybe_stdout, "pipe")) {
|
||||||
new_out = make_pipes(&pipe_out, 0, &pipe_errflag);
|
new_out = make_pipes(&pipe_out, 0, &pipe_errflag);
|
||||||
pipe_owner_flags |= JANET_PROC_OWNS_STDOUT;
|
pipe_owner_flags |= JANET_PROC_OWNS_STDOUT;
|
||||||
} else if (!janet_checktype(maybe_stdout, JANET_NIL)) {
|
} else if (!janet_checktype(maybe_stdout, JANET_NIL)) {
|
||||||
new_out = janet_getjstream(&maybe_stdout, 0, &orig_out);
|
new_out = janet_getjstream(&maybe_stdout, 0, &orig_out);
|
||||||
}
|
}
|
||||||
if (janet_keyeq(maybe_stderr, "pipe")) {
|
if (is_spawn && janet_keyeq(maybe_stderr, "pipe")) {
|
||||||
new_err = make_pipes(&pipe_err, 0, &pipe_errflag);
|
new_err = make_pipes(&pipe_err, 0, &pipe_errflag);
|
||||||
pipe_owner_flags |= JANET_PROC_OWNS_STDERR;
|
pipe_owner_flags |= JANET_PROC_OWNS_STDERR;
|
||||||
} else if (!janet_checktype(maybe_stderr, JANET_NIL)) {
|
} else if (!janet_checktype(maybe_stderr, JANET_NIL)) {
|
||||||
@ -1063,11 +1063,6 @@ JANET_CORE_FN(os_execute,
|
|||||||
"`env` is a table or struct mapping environment variables to values. It can also "
|
"`env` is a table or struct mapping environment variables to values. It can also "
|
||||||
"contain the keys :in, :out, and :err, which allow redirecting stdio in the subprocess. "
|
"contain the keys :in, :out, and :err, which allow redirecting stdio in the subprocess. "
|
||||||
"These arguments should be core/file values. "
|
"These arguments should be core/file values. "
|
||||||
"One can also pass in the :pipe keyword "
|
|
||||||
"for these arguments to create files that will read (for :err and :out) or write (for :in) "
|
|
||||||
"to the file descriptor of the subprocess. This is only useful in `os/spawn`, which takes "
|
|
||||||
"the same parameters as `os/execute`, but will return an object that contains references to these "
|
|
||||||
"files via (return-value :in), (return-value :out), and (return-value :err). "
|
|
||||||
"Returns the exit status of the program.") {
|
"Returns the exit status of the program.") {
|
||||||
return os_execute_impl(argc, argv, 0);
|
return os_execute_impl(argc, argv, 0);
|
||||||
}
|
}
|
||||||
@ -1076,8 +1071,12 @@ JANET_CORE_FN(os_spawn,
|
|||||||
"(os/spawn args &opt flags env)",
|
"(os/spawn args &opt flags env)",
|
||||||
"Execute a program on the system and return a handle to the process. Otherwise, takes the "
|
"Execute a program on the system and return a handle to the process. Otherwise, takes the "
|
||||||
"same arguments as `os/execute`. Does not wait for the process. "
|
"same arguments as `os/execute`. Does not wait for the process. "
|
||||||
"The returned value has the fields :in, :out, :err, :return-code, and "
|
"For each of the :in, :out, and :err keys to the `env` argument, one "
|
||||||
"the additional field :pid on unix-like platforms.") {
|
"can also pass in the keyword `:pipe`"
|
||||||
|
"to get streams for standard IO of the subprocess that can be read from and written to."
|
||||||
|
"The returned value `proc` has the fields :in, :out, :err, :return-code, and "
|
||||||
|
"the additional field :pid on unix-like platforms. Use `(os/proc-wait proc)` to rejoin the "
|
||||||
|
"subprocess or (os/proc-kill proc)`") {
|
||||||
return os_execute_impl(argc, argv, 1);
|
return os_execute_impl(argc, argv, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user